Commit Graph

960 Commits

Author SHA1 Message Date
Axel Dörfler
2b14cdd11c * Added a mutex_trylock() function.
* Replaced release_sem() with release_sem_etc() for future addition of the
  B_DO_NOT_RESCHEDULE flag.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22308 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 16:41:52 +00:00
Axel Dörfler
8c657126cd * Removed unused vm_page::busy_{reading|writing} fields.
* Fixed vm_page_allocate_page_run(): it did not take the pageState into account,
  and would therefore return uninitialized memory (ie. B_CONTIGUOUS areas would
  contain garbage).
  Now, it stores if a page is cleared in a new vm_page::is_cleared field.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22306 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 15:04:29 +00:00
Ingo Weinhold
cf8b3687f4 * The page cache hash table size was fixed to 1024 slots, but even when
freshly booted, it would already contain > 20000 pages. The size is
  now initialized to half of the available pages. Ideally it would
  grow/shrink dynamically, though.
* Changed the hash function to yield a better distribution.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22211 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-09 17:36:13 +00:00
Ingo Weinhold
40c3aedf8d * Added hash_count_elements() and hash_count_used_slots() (mainly for
diagnostic purposes).
* hash_init() adjusts the table size to a prime number, which should
  result in a better element distribution, particularly since usually a
  power of two is passed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22210 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-09 17:19:52 +00:00
Ingo Weinhold
8687956af2 * Added a clarifying comment to free_vnode() and prevented the vnode
reference count to drop below 0 there.
* Added TODO describing a serious race condition between free_vnode()
  and the page daemon.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22209 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-09 14:38:58 +00:00
Ingo Weinhold
c8a342a476 * The method vm_cache_remove_consumer() and the page daemon used to get
a reference to a by them not yet referenced cache was not correct.
  They only incremented the reference count, but a vnode cache reference
  includes also a vnode reference. In case of the page daemon this would
  cause vnode references to be lost (causing bug #1465).
* The page daemon used an unsafe method to access a yet unreferenced
  page cache. There was nothing that prevented the cache from being
  deleted while the page daemon tried to get a reference. The
  vm_page::cache field is now protected by the page cache table
  spinlock, too, which the new function
  vm_cache_acquire_page_cache_ref(), used by the page daemon, also
  acquires while trying to get the reference.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22208 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-09 14:36:10 +00:00
Ingo Weinhold
8eacd105eb Fixed check I messed up recently.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22206 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-08 20:47:37 +00:00
Ingo Weinhold
62454aae66 Fixed get_mount(). It must also acquire the vnode lock before trying to
increment the root node vnode reference count. Otherwise it could race
with fs_unmount(). Fixes bug #1438.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22203 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-08 17:03:19 +00:00
Ingo Weinhold
43ab7500cc Some cleanup. Fixed gcc 4 warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22202 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-08 16:17:59 +00:00
Ingo Weinhold
08dd9e7f3c Missed to commit that change recently. Try to publish a partition only,
if it hasn't been published yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22201 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-08 16:14:45 +00:00
Ingo Weinhold
6b6f6b7240 Partitions do now know whether they have already been published and
avoid attempts to publish a second time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22198 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-07 00:05:06 +00:00
Ingo Weinhold
c22ee2bf75 When avoiding to rescan a partition, we still have to recurse so that
its unidentified children can be scanned, if necessary.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22197 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-06 23:47:07 +00:00
Ingo Weinhold
923efaa872 * We store the ID of the controlling terminal and the foreground process
group ID with the session and let the terminal update them.
* Added an "orphaned" flag to the process_group structure and code to
  maintain it.
* Handle the death of a controlling process correctly: The
  foreground process group gets a SIGHUP and all newly-orphaned process
  groups containing at least one stopped processes are sent
  SIGHUP+SIGCONT.
* The tty handles the O_NOCTTY flag correctly, now.
* The tty handles reads/writes from processes from other sessions
  correctly, now.
* Handle tcsetpgrp() from background processes correctly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22187 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-06 02:16:25 +00:00
Ingo Weinhold
df716df51d * Added is_signal_blocked() convenience function.
* Defined flag SIGNAL_FLAG_TEAMS_LOCKED for send_signal_etc(), so it can
  be called with the team lock being held.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22186 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-06 02:03:43 +00:00
Ingo Weinhold
35e78b5674 * Some cleanup in _user_setpgid() (use of autolocking, don't use
shadowing variables).
* Resolved TODO: We wake up the parent if waiting in wait_for_child()
  now, if the process group changes.
* Added another TODO: setpgid() is supposed to fail on a child after
  it has executed exec*().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22185 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-05 19:36:38 +00:00
Ingo Weinhold
33f0dbe40a * Resolved TODO: waitpid() clears pending SIGCHLD, if the signal is
blocked and no other child status is available.
* Respect SA_NOCLDWAIT and ignored SIGCHLD in waitpid(): Unless a child
  status is available immediately, the thread shall block until all
  children are gone.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22161 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 21:35:24 +00:00
Ingo Weinhold
eadeecc2ff Updated TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22159 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 20:35:27 +00:00
Axel Dörfler
87689e25ea * sMappingLock is now a mutex instead of a spinlock.
* The vm_translation_map is now correctly held in all of the vm_ mapping
  functions.
* Removed the old vm_daemons.c file - there is now a new vm_daemons.cpp
  which contains the beginnings of our new page daemon.
  So far, it's pretty static and not much tested. What it currently does
  is to rescan all pages in the system with a two-handed clock algorithm
  and push pages into the modified and inactive lists.
* These inactive pages aren't really stolen yet, even though their mappings
  are removed (ie. their next access will cause a page fault). This should
  slow down Haiku a bit more, great, huh? :-)
* The page daemon currently only runs on low memory situations, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22156 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 15:41:14 +00:00
Axel Dörfler
d8badf6791 * Renamed page queues according to our style guide.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22155 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 15:35:09 +00:00
Axel Dörfler
b50494aaac * file_cache_set_size() now calls file_cache_invalidate_file_map() with the
correct values (resolving a TODO); however, the latter doesn't do anything
  with those yet.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22154 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 12:42:53 +00:00
Ingo Weinhold
bc5f008afb Added "breakpoint", "watchpoint", "breakpoints", and "watchpoints"
kernel debugger commands, which can set/clear/list in-kernel break- and
watchpoints. Only available when KERNEL_BREAKPOINTS is defined. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22153 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 00:32:30 +00:00
Ingo Weinhold
d2056c9933 * Added "caches" debugger command (to be enable by defining
DEBUG_CACHE_LIST) that prints an unspectacular list of pointers to all
  existing caches. Feel free to extend.
* Enhanced MultiAddressSpaceLocker:
  - It supports choosing between read and write lock per address space,
    now.
  - Added AddAreaCacheAndLock(), which adds the address spaces of all
    areas that are attached to a given area's cache, locks them, and
    locks the cache. It makes sure that the area list didn't change in
    the meantime and optionally also that all areas have their
    no_cache_change flags cleared.
* Changed vm_copy_on_write_area() to take a cache instead of an area,
  requiring it to be locked and all address spaces of affected areas to
  be read-locked, plus all areas' no_cache_change flags to be cleared.
  Callers simply use MultiAddressSpaceLocker:: AddAreaCacheAndLock() to
  do that. This resolves an open TODO, that the areas' base, size, and
  protection fields were accessed without their address spaces being
  locked.
* vm_copy_area() does now always insert a cache for the target area. Not
  doing that would cause source and target area being attached to
  the same cache in case the target protection was read-only. This
  would make them behave like cloned areas, which would lead to trouble
  when one of the areas would be changed to writable later.
* Fixed the !writable -> writable case in vm_set_area_protection(). It
  would simply change the protection of all mapped pages for this area,
  including ones from lower caches, thus causing later writes to the
  area to be seen by areas that shouldn't see them. This fixes a problem
  with software breakpoints in gdb. They could cause other programs to
  be dropped into the debugger.
* resize_area() uses MultiAddressSpaceLocker::AddAreaCacheAndLock() now,
  too, and could be compacted quite a bit.
 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22152 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-02 22:55:23 +00:00
Ingo Weinhold
addece2001 * Fixed incorrect check in condition_variable_interrupt_thread().
Condition variables would never be interrupted.
* ConditionVariableEntry::Add() did not correctly insert the entry into
  the per-thread list of entries (the next link of the previous entry
  was not adjusted), which could leave the entry unnotified when the
  previous entry was notified, thus leaving it in the respective
  condition variable's list after the end of its life time. This should
  fix a crashing bug I rarely encountered.
* Added debug checks in the PrivateConditionVariableEntry
  constructor/destructor that should have helped me to find
  forementioned bug hours earlier, had I been bright enough to realize
  that I didn't include <debug.h> and those KDEBUG guarded checks were
  never executed. :-/


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22151 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-02 22:21:26 +00:00
Ingo Weinhold
667f1eeb67 * Added support for setting (hardware) break-/watchpoints in the kernel.
Can be enabled by defining KERNEL_BREAKPOINTS in arch/user_debugger.h
  and will provide the arch_{set,clear}_kernel_{break,watch}point()
  function. Hitting a break-/watchpoint will throw the thread into KDL.
* Finally added a comment, what's the point of
  i386_reinit_user_debug_after_context_switch(), since I wonder every
  time I see it. Should be optimized aways soon.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22150 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-02 22:04:36 +00:00
Axel Dörfler
22e95c5911 * creating (or dividing) reserved areas did not acquire a ref to an address
space - but they were released upon deletion. It's probably not really
  needed, but now all reserved areas also grab a reference to their address
  space.
* Rearranged team tear down to be a bit more sane: the I/O context is removed
  first (where semaphores/areas/ports/whatever might still be used), and the
  address space is deleted last.
* delete_area() can now remove its address space reference again (due to the
  two changes above), and therefore fixes bug #1374.
* cleaned up vm_address_space.c a bit (no functional change there, though).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22130 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-31 14:20:28 +00:00
Ingo Weinhold
74c17141dc arch_debug_get_caller() was returning the return address of the wrong
stack frame (i.e. its own). Not sure what the comment is supposed to
mean. Tested with gcc 2 and 4.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22121 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-30 02:27:06 +00:00
Ingo Weinhold
e7555d345c Also interrupt condition variables in _user_debug_thread().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22120 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-30 02:22:52 +00:00
Ingo Weinhold
9774b66a7d Fixed incorrect check.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22116 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-30 00:57:12 +00:00
Ingo Weinhold
1273dcaaae Respect SA_NOCLDSTOP.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22101 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 21:34:05 +00:00
Ingo Weinhold
f8ae4fe2c2 Added TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22094 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 14:28:22 +00:00
Ingo Weinhold
e8b3ee8155 SIGCHLD also needs to be sent when a child is stopped. The shell now
properly realized when a job has been stopped.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22093 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 14:24:34 +00:00
Ingo Weinhold
10206d89d5 We need to use kprintf() in the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22091 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 03:34:44 +00:00
Ingo Weinhold
63fa790e9b fVariable was not correctly unset when the condition variable entry was
removed from the variable, which could lead to crashes under certain
cicrumstances.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22090 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 03:34:06 +00:00
Ingo Weinhold
24bcf55926 * Introduced new job_control_entry structure which, among other things,
is used instead of death_entry for team::dead_children.
* Added team::{stopped,continued}_children, which, analoguously to
  dead_children, are used to track the state of stopped/continued
  children.
* A team does have a job_control_entry, which is allocated at team
  creation time. It will be inserted into the parent's
  {stopped,continued}_children lists as the team's main thread is
  stopped/continued and removed when waitpid() retrieves the child
  state. When the team dies the entry is detached from the team and goes
  into the parent's dead_children list.
* Removed the wait_for_any field from team_dead_children. It was solely
  used to avoid deletion of the contained entries in certain situations.
  wait_for_child() (the waitpid() backend) always deletes an entry now,
  regardless of whether other threads are waiting; that's in
  accordance with the waidpid() specification. wait_for_thread() removes
  the entry only, if the caller is the parent of the respective team.
* Introduced team_set_job_control_state() which performes the job
  control entry transitions between the respective lists and wakes up
  threads waiting in wait_for_child(). It is invoked on team death and
  when the team's main thread receives job control signals.
* Reorganized wait_for_child(). It handles WCONTINUED and WUNTRACED now,
  too. Removed a block that interpreted the supplied ID as thread ID.
* Added missing parts in waitpid().

Job control starts to work, though it seems to have some glitches.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22088 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 03:29:14 +00:00
Ingo Weinhold
c9e5503e5e Notify*() and Unpublish() acquire the threads lock. So they need to know
whether the lock is already being held.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22087 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-28 02:25:14 +00:00
Ingo Weinhold
ff895459b7 * Replaced the team::dead_children::sem semaphore by a condition
variable. Due to C code including the header I had to turn it from and
  aggregated member to a pointer. I'm very close to starting to convert
  all remaining .c to .cpp files. :-/
* Got rid of the "waiters" field. It was only written, never read.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22084 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-27 20:30:34 +00:00
Ingo Weinhold
4ed7917682 Wait() returns a status_t now, which can be B_OK (condition variable
exists and thread was notified), B_ENTRY_NOT_FOUND (condition variable
not found or Unpublish()ed while waiting), or B_INTERRUPTED
(interrupted by a signal).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22083 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-27 20:17:31 +00:00
Ingo Weinhold
ff308b0b49 Condition variables changes:
* Removed left-over commented C implementation.
* It is now possible for a thread to wait for more than one condition
  variable at a time.
* Made waiting for condition variables optionally interruptable.
* Renamed Notify() method to NotifyAll() and added a NotifyOne(), so
  that it is now possible to wake up only one of the waiting threads.
Pretty much untested at the moment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22081 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-26 23:53:12 +00:00
Jérôme Duval
61b50eed27 fix gcc4 build
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22080 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-26 21:34:43 +00:00
Ingo Weinhold
ebe6d10684 Turned the files I intend to devastate to C++.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22074 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-26 20:37:54 +00:00
Ingo Weinhold
76a8ec23db * Added disk system flags for whether a partition name and partition
content name are supported.
* Added file_system_module_info::flags (analogously to
  partition_module_info::flags) which indicate which disk device
  features the FS supports.
* Replaced the
  file_system_module_info/partition_module_info::supports_*()
  hooks by a get_supported_operations() hook and for partitioning
  systems additionally a get_supported_child_operations() hook.
* Updated file and partitioning systems accordingly.
* Updated fs_shell accordingly.
* Updated the DDM accordingly. The syscall interface remains unchanged,
  though.
* _user_supports_initializing_partition() also checks whether the parent
  partitioning system is content now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22043 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-22 21:21:30 +00:00
Marcus Overhagen
20c4c9e77e Don't trust the user, and enforce the iovec limit.
Also check for negative positions smaller -1
(as -1 means using current address).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22031 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 19:07:10 +00:00
Axel Dörfler
8ac552e4d1 Fixed dumping the stack trace for the current thread by ID - that should have
been a warning (at least in C++ it is).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22026 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 10:26:54 +00:00
Axel Dörfler
9d22ffbe84 Fixed bug #1413:
* vm_soft_fault() no longer touches the page source cache in case fault_get_page() failed.
* fault_find_page() now unlocks and releases the cache if reading in a page failed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22016 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-20 14:27:11 +00:00
Axel Dörfler
871d97a9f5 * Fixed the kernel bug that prevented SIGCONT from working properly: the problem
occured if SIGSTOP was already delivered but not yet handled when SIGCONT was
  sent. Now, SIGCONT will clear all stop signals from the pending signals.
* SIGTSTP, SIGTTIN, and SIGTTOU are supposed to suspend the thread as well, adapted
  the default behaviour to respect that.
* Removed the work-around from r21997 TermParse.cpp for this exact problem.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22004 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-17 13:08:24 +00:00
Axel Dörfler
a728651f04 Some more work on the signal code:
* get_signal_stack() checked the wrong sig_action field (index is signal-1), also,
  it had an off-by-one error in the stack range check.
* factored out a restart_syscall() function to avoid code duplication
* arch_setup_signal_frame() relied on the fact that vregs and the signal stack code
  is a multiple of 4 bytes in size.
* Fixed sigaction(): it did return the error code directly instead of setting errno.
* signal() actually had a work-around for the broken sigaction()...
* Replaced the sig_func_t typedef with a sighandler_t typedef - this is non-standard
  anyway, but now we're at least compatible with the GNU world instead of introducing
  our own solution (BSD seems to use sig_t here, BTW).
* Removed now unused sigval structure from the header; it should be added again as
  soon as we start supporting it.
* SA_RESETHAND and SA_ONESHOT are the same thing; the former did not work before.
* Made the non-standard SA_* flags refer to the standard ones instead of the other
  way around.
* Added a test application for various signal features - works fine under Haiku,
  tested also under Linux and BeOS (the latter fails as it does not support SA_RESTART).
  More tests should be added, though.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21999 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-17 11:01:09 +00:00
Axel Dörfler
0b70ea5992 * Implemented sigaltstack() and set_signal_stack(), thus closing bug #1401.
* On exec() the new function thread_reset_for_exec() is called which clears the signals
  and cancels an eventually set alarm. Both things weren't done before...
* Some minor cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21989 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-16 18:01:47 +00:00
Axel Dörfler
a2e2784cf3 * arch_restore_signal_frame() accessed user memory unsafely; it now also copies the (pretty
large) vregs structure to the stack.
* Introduced a get_signal_stack() function that arch_setup_signal_frame() now uses to setup
  the signal frame - it currently only returns the default user thread stack. Also made
  sure arch_setup_signal_frame() is independent from the user stack.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21983 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-16 15:11:58 +00:00
Axel Dörfler
066a557444 * vm_soft_fault() no longer sets all pages it touches to "active"; instead, it now honours
if the page was already in the "modified" list before. Also, the source page (which is
  either mapped directly or copied to the target page) is no longer marked busy before its
  final destiny is decided (it didn't have any effect, anyway, since we had its cache
  locked for the whole time, but it now preserves the modified state). This fixes bug #1369.
* vm_cache_write_modified() now filters out temporary caches (it's currently called on area
  deletion).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21971 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-15 23:11:15 +00:00
Ingo Weinhold
337171e417 Fixed the documentation.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21917 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 23:54:15 +00:00
Ingo Weinhold
5c806b5dbc map_backing_store() would deadlock in error case for REGION_PRIVATE_MAP.
Closes #1379.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21914 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-12 22:32:23 +00:00
Ingo Weinhold
2529455101 Revised the AVLTreeMap code:
* Pulled the actual tree code into a non-templatized class AVLTree to
  reduce the amount of code generated each time the template is
  instantiated.
* Changed the iterator interface to Java-style.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21892 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-11 14:57:25 +00:00
Ingo Weinhold
13542314ef Removed special dummy page handling. It became obsolete with r21816,
since fault_find_page() does no longer insert a dummy page into a cache
that has a store from which it can read the page.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21887 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-11 00:31:14 +00:00
Ingo Weinhold
279c6b76dc * Use condition variables when waiting for busy pages or busy caches.
* Removed a few instances where the page state was set busy directly after 
  allocating it. This is a no-op, since a page is always busy after 
  allocation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21875 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-09 20:08:25 +00:00
Ingo Weinhold
227402f2bf Added simple condition variables to the kernel. They are a relatively
cheap means to block threads until notified explicitely.
threads 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21874 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-09 20:03:17 +00:00
Axel Dörfler
a2057fac93 Since get_memory_map() can run with interrupts turned off, it can't put up
it's reference to the vm_address_space - luckily, it doesn't even need a
reference, since it always runs in the current address space, which cannot
go away for obvious reasons.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-08 23:51:20 +00:00
Axel Dörfler
69bee56c3b * get_memory_map() leaked vm_address_space references
* fixes a dead lock in vm_soft_fault() - the locking scheme enforces you to
  lock the address space before a vm_cache, not the other way, around. Since
  we need to lock the cache that has our page in fault_get_page(), we violated
  that scheme by relocking the address space in order to get access to the
  vm_area. Now, we read lock the address space during the whole page fault;
  added a TODO that explains why this might not really be desirable, if
  we can avoid it (the only way would be to reverse that locking scheme
  which would potentially cause the more busy vm_cache locks to be held
  longer).
* vm_copy_area() uses the MultiAddressSpaceLocker, but actually forget to
  call Lock() on it...
* delete_area() leaks vm_address_space references - but fixing this currently
  causes other problems to be investigated; I'll open a bug for that.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-08 22:38:46 +00:00
François Revol
e0475f8f7e Fix building with TRACE
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21861 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-08 21:44:30 +00:00
Axel Dörfler
5af1dda793 bonefish+axeld:
* Removed the ref_count from vm_areas. You now always need to have the address
  space locked (read or write, depending on what you do) when dealing with
  areas.
* Added helper classes for locking the address space: AddressSpace{Read|Write}Locker,
  and MultiAddressSpaceLocker which can lock several spaces at once and makes
  sure no dead locks can happen.
* resize_area() is now using the MultiAddressSpaceLocker instead of no locking
  at all; ie. it should now be safely to use.
* Disabled transfer_area() for now; it will be changed to work like an atomic
  clone_area()/delete_area(), that is, it will hand out a new ID for the
  transfered area.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21848 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-07 21:46:58 +00:00
Axel Dörfler
7e188a5b4b Now prints a more detailed message in case the kernel stack couldn't be created.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21847 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-07 01:54:08 +00:00
Ingo Weinhold
2ac748daf1 * Changed the signatures of fault_get_page() and fault_find_page(), so
that an error can be propagated back to vm_soft_fault().
* Added boolean restart reference parameter to fault_find_page() which
  is set to true whenever a condition is it encountered that requires
  to start fault_find_page() from the very beginning. fault_get_page()
  checks the flag and executes fault_find_page() in a loop, now.
* Removed the panic()s+TODOs in fault_find_page() when a cache became
  busy. The restart feature is used in this case.
* fault_find_page(): If after the loop we haven't found a page yet,
  and after locking the right cache one turned up, we restart the
  function, too, thus avoiding double insertion of a page into a cache.
* Fixed potential dead-lock in fault_get_page(): After inserting a clean
  page into a cache other than the top cache (read fault on
  copy-on-write area not backed by a file (e.g. the heap)) the dummy
  page was removed from the to be locked top cache while we still held a
  lock for the lower cache, thus inverting the locking direction
  required by the cache locking policy (top -> bottom).
* fault_get_page(): In case of a write access and a readable page found
  in a lower cache, vm_cache_remove_consumer() could have replaced our
  dummy page with a real page from a collapsed lower cache while we
  had unlocked both caches. We didn't check for this condition and
  always inserted our freshly allocated page, thus potentially inserting
  a duplicate page into the top cache. We do the check now and discard our
  page, when another page turned up. Fixes bug #1359.
* fault_get_page(), same if block: Removed unused case for removal of the
  dummy page from a non-top cache. We only ever insert it into the top
  cache and it should not be moved to another cache. Added an assert.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-06 18:06:01 +00:00
Axel Dörfler
f58cf973ad mmlr+bonefish(+axeld - I put the bug in there ;-)):
* Inode::MayReleaseWriter() would release the semaphore too often; therefore,
  Inode::WriteDataToBuffer() now loops in case it still couldn't write anything
  instead of failing - this fixes a race condition (ie. a device is full message).
* In case the read request got filled two times (while adding the request, and
  after waiting for it to become filled), ReadRequest::PutBuffer() overwrote the
  output data. This fixes bug #1331.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21830 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-05 23:38:31 +00:00
Marcus Overhagen
d1dc70fa5f FD_CLOEXEC is a flag, other bits may be set
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21829 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-05 13:56:01 +00:00
Ingo Weinhold
fd772abcb4 Paranoia: vm_cache_insert_page() does now check whether a page for the
offset of the page to insert is already in the cache. Revealed the bug
fixed with my previous commit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21817 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-04 00:36:50 +00:00
Ingo Weinhold
0a75dab5fe fault_find_page(): Fixed a race condition in case of reading the page
from the store into the top cache, which could lead to pages inserted
multiple times into the cache. We don't insert a dummy page in this case
anymore. Instead we mark a freshly allocated page busy and insert that
one. That's exactly the approach the file cache uses too. This does
probably make the whole dummy page special handling in the file cache
obsolete.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21816 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-04 00:33:47 +00:00
Ingo Weinhold
7c3a45ec5e Although probably not used ATM, cache_prefetch_vnode() should respect
busy pages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21815 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-04 00:24:13 +00:00
Axel Dörfler
e9012605b8 vfs_get_vnode_cache() was changed (read: fixed) since r18716; it was wrong
to acquire the extra vnode reference, and actually prevented unmounting from
working - which it now does again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21806 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-03 01:26:35 +00:00
Axel Dörfler
171d3a85cb * Made the module code more robust against putting more module reference
than you own - instead of crashing some time later, it will now panic as
  soon as it can.
* No longer put the module image for B_KEEP_LOADED modules - essentially,
  that feature was broken.
* Now use the RecursiveLocker in favour of manual locking where appropriate.
  This actually fixed two locking bugs in error code paths.
* Applied a patch by François Revol: open_module_list() did not work
  when the prefix was already inside a module (as opposed to a directory
  on disk). The current solution is not as efficient, but that can be
  fixed by improving the iterator code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21803 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-02 21:44:54 +00:00
Ingo Weinhold
9e12e9a72e * Added mapping of dup() in the FS shell.
* Adjusted the FS initialize() hook to have FD and partition_id
  parameters like the other hooks instead of the partition path.
* Adjusted initialization in BFS accordingly.
* Implemented the FS initialization method in KFileSystem.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21788 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-02 12:43:49 +00:00
Ingo Weinhold
6b7bedcbee axeld + bonefish:
Certain interrupts don't disable interrupts. We were calling 
x86_{push,pop}_iframe() without specifically disabling them, thus causing 
a race condition with could cause the iframe stack to be invalid. This 
could cause all kinds of problems.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21784 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-02 02:48:11 +00:00
Ingo Weinhold
e786c1d6a9 axeld + bonefish:
After exec() we re-entered the userland without removing the syscall
iframe from the iframe stack, thus leaking one stack slot.
Fixes bug #1304.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21783 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-02 02:37:35 +00:00
Axel Dörfler
463be7ab63 Extended the "last acquirer" debug stuff to also contain the thread that
released it last, and the counts involved.
Furthermore, release_sem_etc() will now only negate the acquirer thread
ID instead of setting it to -1.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21781 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-01 16:46:24 +00:00
Axel Dörfler
edb15b5565 bonefish+axeld:
* Simplified the notification framework: removed the updater stuff completely;
  it was only there to account for some peculiarities of the node monitor which
  we now solved differently.
* NotificationListener no longer includes a doubly linked list link for convenience;
  it might want to listen to more than just one service.
* NotificationService cannot have an abstract destructor.
* Changed the _user_stop_watching() syscall to mirror the Be API; ie. it's no
  longer possible to just remove some flags separately, just to stop listening
  completely.
* Adapted the node monitor implementation to live in the NodeMonitorService class
  that uses the new notification framework.
* Removed the public kernel node monitor API - it wasn't useful that way since you
  couldn't do a lot with the KMessage in the kernel without using a private API.
  Now you will have to use the (private) notification manager to use the node monitor
  from inside the kernel. At a later point, we might introduce a public API for that,
  too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21780 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-01 14:48:44 +00:00
Axel Dörfler
a898ee19d6 Ahem... build fix. Forgot that there were some last minute changes that shouldn't have been part of the commit...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-31 17:17:51 +00:00
Axel Dörfler
bec0386d82 bonefish+axeld: Implemented a robust notification framework for the kernel.
Will be used for node monitoring and other stuff, too (like the Registrar or the
VM low memory handler).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21768 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-31 16:23:40 +00:00
Axel Dörfler
8405223037 axeld+bonefish: Got rid of the ParentType in the HashTableDefinition; it doesn't really
belong there.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21766 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-31 16:14:58 +00:00
Axel Dörfler
6e09c5679e area_for() in the kernel can now also find user areas in case you are coming from a user team.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-30 11:54:11 +00:00
Axel Dörfler
4bef3723a1 * Followed Ingo's suggestion and send the message manually in the runtime loader;
therefore, we could remove the ugly defines from KMessage again, and compile it
  with KMESSAGE_CONTAINER_ONLY.
* Added KMessage::SetDeliveryInfo() to be able to send messages with a correct
  header.
* Fixed a bug in KMessage::SendTo() that would not send the senderTeam when passing
  a negative value for the parameter, but override it when passing in a valid
  value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21740 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 21:36:49 +00:00
Marcus Overhagen
4e7050cd09 Allow thread priority setting from inside kdl. Right now, a
single priority 12 thread can make the whole GUI appear frozen.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21736 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 01:30:59 +00:00
Marcus Overhagen
3ab19002fe Added "suspend", "resume" and "drop" commands to kernel debugger.
It's now possible to debug amok-running user threads by 
suspending or resuming them, as well as dropping them into 
the userland-debugger from inside kdl.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21734 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 01:06:36 +00:00
Marcus Overhagen
8f5e97473f build fix (rebuidling MessagingService.o wasn't possible after this jamfile was changed in r21715)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21733 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 00:51:36 +00:00
Marcus Overhagen
2e53897578 kernel debugger support for suspending a thread
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21732 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-29 00:24:54 +00:00
Marcus Overhagen
71ec907eaa Build fix for GCC 4
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21731 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-28 22:36:02 +00:00
Ingo Weinhold
d86af8ce27 * Style cleanup.
* Moved method documentation from headers to source files.
* Fixed small problems (memory leaks, unsafe string duplication,...).
* Added TODOs where I spotted problems.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21721 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 16:32:47 +00:00
Ingo Weinhold
e098680c08 Missed those in the previous commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21720 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 15:37:23 +00:00
Ingo Weinhold
2dc6403ddc Addition of write support to the disk device manager. Courtesy of Tomas
Kucera and Jan Matejek.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21719 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 12:12:35 +00:00
Axel Dörfler
74c0424a43 * Added a mechanism to retrieve a BMessage with eventual error descriptions
for _kern_load_image().
* Added KMessage to the runtime_loader (a bit hacky, though) - it will use
  it to deliver the above mentioned functionality.
* load_dependencies() did return the wrong status code in case a library
  was missing; now it returns B_MISSING_LIBRARY.
* load_dependencies() will now try to load all dependencies when a report
  message is requested; therefore, all missing libraries are listed.
* Renamed uspace_program_args to user_space_program_args.
* The kernel filled in various members of the user_space_program_args structure
  unsafely, ie. was not using user_memcpy().
* Renamed some local variables in team.c to better fit our style guide (ie.
  uargs to userArgs).
* Changed Tracker to use the new _kern_load_image() variant on Haiku to retrieve
  and report all missing libraries. This fixes bug #1324.
* Adapted kernel_cpp.cpp to the runtime loader as well; the latter will now
  compile with _LOADER_MODE defined.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21715 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 02:32:19 +00:00
Axel Dörfler
d6dfbc4de5 Minor cleanup in comments.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21714 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 02:15:39 +00:00
Axel Dörfler
266528b633 read_port[_etc]() now allows the msgCode pointer parameter to be NULL - as on BeOS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21712 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-27 01:34:14 +00:00
Marcus Overhagen
ba8c1ff561 Make partition access saver. attempts to read or write outside of a partition
now fail with B_BAD_VALUE. It's also no longer possible to overwrite the begin
of a partition by specifying a negative position, as negative positions are no
longer translated into 0.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21702 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-25 22:30:59 +00:00
Axel Dörfler
528e58c58e Fixed debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-23 00:52:07 +00:00
Ingo Weinhold
6d1c68155a axeld + bonefish:
* More conditional debug code (wrt page transitions between caches).
* Replaced debugger command cache_chain by a nicer cache_tree.
* While handling a soft fault: When we temporarily unlock a cache, it
  can theoretically become busy. One such occurrence is now handled
  properly, two more panic() ATM, though should be fixed.
* When merging caches, we do now always replace a dummy page in the
  upper cache, not only when the concurrent page fault is a read fault.
  This prevents a page from the lower (to be discarded) cache from still
  remaining mapped (causing a panic).
* When merging caches and replacing a dummy page, we were trying to
  remove the dummy page from the wrong cache (causing a panic).

The Haiku kernel seems now to run shockingly stable. ATM, we have more
than two hours uptime of a system booted and running over network. We
didn't manage to get it down by fully building Pe, downloading, unzipping,
and playing with various stuff. Someone should finally fix all those app
server drawing bugs, though (hint, hint! ;-)).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21672 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 22:52:23 +00:00
Ingo Weinhold
fec9ab5d63 More informative output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21669 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 21:43:22 +00:00
Ingo Weinhold
f4da50b768 Computed the netmask in net endianess. The wrong netmask caused
misrouting when the net server set up the loop device, thus stopping the
net boot process.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 13:58:17 +00:00
Ingo Weinhold
210ea8a561 axeld + bonefish:
Answered Travis question. We save the registers from the exception
causing the double fault in the double fault iframe, since otherwise it
would contain only completely unusable values.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 13:55:56 +00:00
Ingo Weinhold
9c31fe7e21 Implemented emulating write_pages() using the write() hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 13:35:53 +00:00
Ingo Weinhold
fe679b9fa7 axeld+bonefish:
* Refactored RescanDiskSystems(). Pulled out a function
  _RescanDiskSystems() that scans for either file or partitioning
  systems. RescanDiskSystems(), which scanned for file systems only
  before, is used from the constructor as well (open_module_list()
  works in the early boot process since a while).
* Made InitialDeviceScan() and partition scanning safe to be called a second
  time. We call it directly after the kernel has mounted the boot
  volume, now, so that additional disk systems from the boot volume have a
  chance to recognize previously unrecognized partitions. This is a
  temporary change only; later the disk device manager shall
  automatically find out when new disk systems/devices/whatever are
  available.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21655 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 13:32:33 +00:00
Ingo Weinhold
17a5219dba bonefish+axeld:
When loading the driver settings the defaults don't override the
previous variable values anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21654 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-19 13:16:08 +00:00
Axel Dörfler
0379077f09 * init_double_fault() accidently initialized the wrong TSS for the handler (the regular
one, not the one intended for the double fault) since r20131. IOW double faults are
  now working again.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21645 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-18 12:40:38 +00:00
Axel Dörfler
58f6e8e5e4 * Merged vm_cache_ref and vm_cache to a single structure (Axel & Ingo).
* Renamed vm_cache.c to vm_cache.cpp


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-18 00:16:27 +00:00
Axel Dörfler
1296365693 Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21641 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-17 23:40:41 +00:00
Ingo Weinhold
1fa400cd92 The partition offset is int64, of course, not bool. Sometimes one wishes,
C++ had a stricter typing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-16 15:06:02 +00:00
Axel Dörfler
3a199128de * Now checks if the BootMethod allocation succeeds.
* Minor cleanup, reordered header files to go from private/local to public/global.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 23:51:21 +00:00
Axel Dörfler
bd1877933f remove_vnode() will now return an error code if the vnode to be removed did not exist.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21614 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 12:38:13 +00:00
Ingo Weinhold
f29a0687cf We were leaking a module reference.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21613 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 02:29:00 +00:00
Ingo Weinhold
9e8dc2a9bb [Sorry, couldn't split this one up any further.]
* Images preloaded by the boot loader had to be modules to be of any use
  to the kernel. Extended the mechanism so that any images not accepted
  by the module code would later be tried to be added as drivers by the
  devfs. This is a little hacky ATM, since the devfs manages the drivers
  using a hash map keyed by the drivers inode ID, which those drivers
  obviously don't have.
* The devfs emulates read_pages() using read(), if the device driver
  doesn't implement the former (all old-style drivers), thus making it
  possible to BFS, which uses the file cache which in turn requires
  read_pages(), on the device. write_pages() emulation is still missing.
* Replaced the kernel_args::boot_disk structure by a KMessage, which can
  more flexibly be extended and deals more gracefully with
  arbitrarily-size data. The disk_identifier structure still exists,
  though. It is added as message field in cases where needed (non net
  boot). Moved the boot_drive_number field of the bios_ia32 platform
  specific args into the message.
* Made the stage 1 PXE boot loader superfluous. Moved the relevant
  initialization code into the stage 2 loader, which can now be loaded
  directly via PXE.
* The PXE boot loader does now download a boot tgz archive via TFTP. It
  does no longer use the RemoteDisk protocol (it could actually be
  removed from the boot loader). It also parses the DHCP options in the
  DHCPACK packet provided by PXE and extracts the root path to be
  mounted by the kernel.
* Reorganized the boot volume search in the kernel (vfs_boot.cpp) and
  added support for network boot. In this case the net stack is
  initialized and the network interface the boot loader used is brought
  up and configured. Since NBD and RemoteDisk are our only options for
  net boot (and those aren't really configurable dynamically) ATM, the
  the boot device is found automatically by the disk device manager.

Booting via PXE does work to some degree now. The most grievous problem
is that loading certain drivers or kernel modules (or related activity)
causes a reboot (likely a triple fault, though one wonders where our
double fault handler is on vacation). Namely the keyboard and mouse input
server add-ons need to be deactivated as well as the media server.
A smaller problem is the net server, which apparently tries to
(re-)configure the network interface we're using to boot, which
obviously doesn't work out that well. So, if all this stuff is disabled
Haiku does fully boot, when using the RemoteDisk protocol (not being
able to use keyboard or mouse doesn't make this a particular fascinating
experience, though ;-)). I had no luck with NBD -- it seemed to have
protocol problems with the servers I tried.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21611 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 02:10:15 +00:00
Ingo Weinhold
3532662e0c Added RemoveLeaf() leaf method. Very handy for recursive directory
iteration code using a single KPath object.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21606 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 00:34:17 +00:00
Ingo Weinhold
dad631290c * Made header includable by C code. In this case a KMessage structure
with the same size as the class is defined.
* The SetTo() methods do now accept an unspecified (negative) bufferSize
  in case of being told to initialize from the given buffer.
* Added handy Get*() methods returning a field element value or a
  supplied default value, if the field element doesn't exist.
* Added also handy Set*() methods setting the value of first element of
  a field, i.e. adding it, if it didn't exist before, otherwise
  replacing the old value. Only for fixed size types.
* Moved _FindType() inline template method into the header.
* Made the source file fit for use in the boot loader. If the macro
  KMESSAGE_CONTAINER_ONLY is defined, the message sending/receiving part
  is omitted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21605 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-15 00:32:37 +00:00
Axel Dörfler
9958d12db2 Because of ongoing problems with thread_yield() and our current scheduler, I've disabled yielding for now; it will now just snooze a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21572 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-05 18:27:27 +00:00
Axel Dörfler
d5a279fef8 Cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21552 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-07-04 17:33:22 +00:00
Axel Dörfler
25f46ea449 * Reserving areas never put down their reference of their address space when
removed in several cases.
* vfs_get_vnode_cache() now always gives out a reference to the cache it
  returns; if it needs to allocate a new one, the vnode owns one reference,
  and the caller another.
* therefore, file_cache_create() now owns a reference to its vm_cache_ref, and
  frees it in file_cache_delete().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21533 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-30 15:36:06 +00:00
Axel Dörfler
a492532bd9 Get rid of outdated and mostly useless docs, updated some of the comments in the source.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21529 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-30 13:58:41 +00:00
Ingo Weinhold
a970df44af * Include HaikuImage after the Jamfiles, so they can provide/adjust info
relevant for the image creation.
* The CopySetHaikuRevision propagates the value of the
  HAIKU_INCLUDE_IN_IMAGE variable from the source to the target.
* Propagate the value of HAIKU_INCLUDE_IN_IMAGE from "kernel" to
  "kernel_$(TARGET_ARCH)".

Now "jam update-install kernel" should work as expected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21527 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-29 19:28:11 +00:00
Axel Dörfler
245aecda8a Got rid of vnode_id and mount_id, replaced with ino_t and dev_t.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21485 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-21 19:50:57 +00:00
Axel Dörfler
0cb94db539 Ingo and I fixed a couple of VM bugs in a late night debugging session:
* vm_copy_on_write_area() now does no longer overwrite the ref_count, but keeps
  it's reference to the cache until it has unlocked it.
* It now also locks its reference from the start, preventing any other thread
  to interfere.
* vm_cache_remove_consumer() now detects if it has to remove a foreign busy
  page itself in order to preserve a mapped page.
* vm_soft_fault() now keeps a reference to the cache that owns the page to be
  mapped until it has actually mapped it.
* vm_unmap_pages() removed the mappings of all pages of the area instead of only
  those that are within the requested range.
* Kept (disabled) debug output for convenience.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21482 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-21 13:57:46 +00:00
Axel Dörfler
8491616029 Putting an unused block will now trigger a panic.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21481 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-21 12:35:39 +00:00
Travis Geiselbrecht
c9788912f0 re-enable kernel asserts.
Disabled by default, but all kernel devs are *highly* recommended to turn them on for your builds and see if it trips anything, and then fix it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21477 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-21 05:37:46 +00:00
Travis Geiselbrecht
554fdaa33a Fix a bug that was tripping an assert in the kernel module code.
When iterating through modules, the iterator was loading the module file, inserting it into the module image hash. Then, the first time get_module() was called on a module contained in the image, it was trying to load the image again. It probably actually was. Changed the logic to call get_module_image() which checks to see if it's already loaded.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-21 05:07:14 +00:00
Axel Dörfler
5de78b2cdb Added some temporary means to ease debugging block caches - at least the list
of all caches should be removed at a later point.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21461 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-18 23:58:15 +00:00
Stefano Ceccherini
d9be8bc0fe Got rid of a global, hope no one minds
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21349 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-08 09:44:13 +00:00
François Revol
fc362b8ad7 handle api_version exported from driver.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21344 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-07 12:46:20 +00:00
Axel Dörfler
b851137be0 * Now replaces the first argument with the actual function name as find_command()
also works for partial matches (which for example broke "running" and "ready"
  when you only entered a part of it).
* Renamed the global args pointer to sArguments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21324 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-04 22:31:24 +00:00
Stefano Ceccherini
1c86f4892b Renamed a couple of variables, for easier reading...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21319 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-04 12:20:58 +00:00
Axel Dörfler
8d1317e1b6 get_next_loaded_module_name() now uses the same (inefficient) mechanism read_next_module_name() is using thanks to Siarzhuk - the previous mechanism was completely unsafe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21316 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-03 23:09:59 +00:00
Axel Dörfler
65c61fbf2d * Applied a patch by Siarzhuk Zharski that allows open_module_list() to be
used during early boot. Thanks!
* Fixed open_module_list() so that it can deal with a NULL prefix.
* Added a note that get_next_loaded_module_name() is implemented incorrectly.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21315 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-06-03 22:55:09 +00:00
Axel Dörfler
176f0604ed Continuing from the kernel debugger did not work on SMP machines, as SMP_MSG_CPU_HALT was
a one way ticket. It now works as expected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21280 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-31 22:09:39 +00:00
Axel Dörfler
9b39fc10cb Cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21279 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-31 22:05:57 +00:00
Axel Dörfler
f415aa28be * create_vnode() now panicks when it could not find the freshly created vnode
in the vnode hash; that's a bug in the FS that shouldn't be ignored that way.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21262 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-28 14:17:18 +00:00
Axel Dörfler
aac3ed8c03 * Reverted r21199 (and therefore r21254) - it actually did work correctly initially,
see bug #1248.
* Closing a pipe now also removes it from the public namespace and marks it for
  deletion, and thus, there are no more left-overs after using a pipe.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21261 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-28 14:12:43 +00:00
Jérôme Duval
6015e60ecc fixed bug #1248
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21254 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-27 19:57:09 +00:00
Jérôme Duval
b5f602a702 added a missing newline, dunno why this message is displayed :)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21250 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-27 14:25:49 +00:00
Hugo Santos
6580fd3848 Stylus cleanupus.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21224 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-23 21:48:31 +00:00
Hugo Santos
77bf99deb0 fixed the way accept() works in regards to the cookie pointer. It is no longer visible to userspace, we pass the fd instead. Also renamed kernel's shutdown() to system_shutdown as it collides with Posix's shutdown().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21223 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-23 19:56:40 +00:00
Axel Dörfler
01e7c0d868 You should not publish *every* node - at least not without releasing the ref if you don't need it.
This should allow you to actually unmount /pipe if you so desire.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21199 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-22 01:56:45 +00:00
Axel Dörfler
6430c89618 * Added find_directory() to the kernel - it currently may not work as good as the
userland version, tbough.
* Small style cleanup in find_directory.c.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21194 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-21 22:28:02 +00:00
Ingo Weinhold
bdf8a2e1e7 Added Haiku revision number to the kernel (same mechanism as used for
libroot). It's available in the kernel through the private
get_haiku_revision() and added to the kernel syslog output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21173 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-19 15:36:32 +00:00
Axel Dörfler
8ca5764554 * Implemented APM generic syscall API to query the current power status.
* PowerStatus is now using this API when compiled for Haiku.
* Note, I'm not sure why yet, but running PowerStatus in the background
  crashes at least my laptop after some time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21154 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-16 15:22:23 +00:00
Axel Dörfler
6f709e745c * Added a name hash to pipefs; this should speedup the lookup when more pipes
are used at the same time.
* Added a TODO item: pipefs entries aren't deleted yet after usage!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21108 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-11 09:16:08 +00:00
Hugo Santos
cdb3eb762a the previously added IO interrupt handling routines are no longer necessary, at least for now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21046 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-06 22:40:52 +00:00
Hugo Santos
5502e596dc added io_interrupt_handler methods for dynamic handling of IO interrupts, including enabling/disabling without allocation and in interrupt context.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21040 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-06 15:07:56 +00:00
Jérôme Duval
c0ca505fb0 devfs now accepts to create directories
is scanning needed here ?


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20982 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-02 19:04:06 +00:00
Marcus Overhagen
3d65babaa6 restore previous serial debug output setting when leaving kernel debugger
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20955 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-01 18:13:01 +00:00
Marcus Overhagen
cafc95e0af Make no-settings-file defaults match the empty-settings-file defaults.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20950 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-05-01 13:00:33 +00:00
Hugo Santos
8cfe0be38e slab/cache: a couple more fixes.
- on CACHE_DURING_BOOT init benaphore count with 1.
 - account for allocated space on early_allocate_pages.
 - fixed slab position calculation in small slabs.
 - we can now init all allocator sizes early rather than later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20914 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-30 01:08:05 +00:00
Hugo Santos
698b6d7195 cache/slab: when CACHE_DURING_BOOT is specified, use vm_allocate_early to obtain pages for slabs, and create the associated areas on post bootup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20913 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 22:58:46 +00:00
Hugo Santos
39af445966 added object_cache_reserve to allow cache users to pre-allocate slabs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20912 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 21:45:23 +00:00
Hugo Santos
11debaf6e4 added CACHE_UNLOCKED_PAGES flag to allow caches' pages to be created with no locking instead of full locking.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20911 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 20:55:44 +00:00
Marcus Overhagen
d995743822 Enabled syslog debug output by default, added new syslog options to config file.
Reversed arguments in kernel settings file, now you only need to uncomment a line
to get the non-default setting. Explained default setting in comments.     


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20907 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 17:22:08 +00:00
Hugo Santos
14342a6767 cache allocator: keep allocation waste statistics. added debugger command 'show_waste'.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 15:28:31 +00:00
Hugo Santos
c49aa60ace cache allocator: for allocations > 8k create areas, and delete them on free.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 15:13:09 +00:00
Hugo Santos
0be6e97788 minimal cleanups
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20901 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 13:11:30 +00:00
Hugo Santos
9a9cba598a don't need TRACE_SLAB by default now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20898 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 03:41:10 +00:00
Hugo Santos
172b3066aa fixed the cache allocator's size_to_cache.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 03:33:51 +00:00
Hugo Santos
6bad493439 pushed the slab init a bit deeper. added a object cache based allocator, including a bootstrap mechanism to have it init during bootup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20896 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-29 02:23:37 +00:00
Hugo Santos
6e31ae98f9 some object cache / slab improvements.
- call the reclaimer callback when low on memory.
 - use the depot when on multi-cpu setups (for scalability).
 - fixed the amount of memory spent on slabs for very large objects.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 21:35:23 +00:00
Hugo Santos
11b5020f2f rewrote the object cache (slab) implementation a bit, preparing for further integration.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20887 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 18:53:58 +00:00
Hugo Santos
8a96ba39e3 some slab cleanups, split the C interface to another file.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20875 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-28 09:37:38 +00:00
Ingo Weinhold
5b1cb74b86 Even more correct return value.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20856 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 10:47:21 +00:00
Ingo Weinhold
93ed453113 More correct return value.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 10:45:57 +00:00
Hugo Santos
0cd08b100c ups, TRACE_SLAB was on.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20852 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-27 08:07:30 +00:00
Hugo Santos
5d6551d69f removed some of the slab's initial heavy debugging. we now merge the links into the slab itself resulting in zero overhead per buffer with MergedLink strategy.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 15:40:53 +00:00
Hugo Santos
d7ae189ecf slab: be smarter when picking the underlying strategy for the slab C API (based on requested object size).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20840 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 12:21:38 +00:00
Hugo Santos
e6fb3d3947 more slab fixes, also introduced a new strategy optimized for medium sized buffers (64 >= x < 512) with lengths other than power of 2 (has an overhead of 2 words per buffer).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 11:38:24 +00:00
Hugo Santos
dd89ad0e7e added locking to slab's Cache<>. Now we react to system's low memory conditions freeing up empty slabs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20836 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 07:31:19 +00:00
Hugo Santos
81bc570922 assorted slab fixes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20833 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 06:05:08 +00:00
Hugo Santos
81423c91c7 added initial slab code to the kernel. It is still unused, and there is still no VM interaction.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20832 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-26 03:41:24 +00:00
Axel Dörfler
5c03270bea Added block_cache_sync_etc() that allows you to sync single blocks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20811 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 12:07:30 +00:00
Axel Dörfler
6d1144bbca The thread context was destructed a bit too early: if a team was killed (or didn't
close all of its file descriptors), code outside of the core kernel would be executed
in the descriptor's close/free hooks.
Since the semaphore timeout code, and send_data()/receive_data() rely on the
thread being available in the thread hash, they wouldn't work anymore.
This fixes bug #1168. Thanks to Marcus for providing such a nice test case :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20808 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-25 08:25:10 +00:00
Axel Dörfler
1c4b5b8a6a Added a debugging command "devfs_node" to dump infos about the private devfs nodes for now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20794 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-24 14:04:26 +00:00
Axel Dörfler
be1f432648 Don't allow creating areas with a size of 0 bytes, courtesy of Vasilis Kaoutsis.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20789 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-23 22:22:29 +00:00
Axel Dörfler
9504919814 Disabled priority boost on semaphore release completely now (after having pacified it
quite a bit in the past already); it somehow doesn't work right with how semaphores
are used in BeOS/Haiku.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20759 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-19 21:30:38 +00:00
Axel Dörfler
22428cc7b6 * More or less reverted my previous thread_yield() change: while this gives
threads with higher priorities a much better scheduling experience, it
  also creates a problem as soon as more than one higher priority thread
  waits on a resource held by a lower priority thread; the higher priority
  threads play ping-pong, and the lower priority thread doesn't get it's
  chance.
* Increased the probability of skipping a thread priority.
* I won't do any other changes on the scheduler, that's meianote's job now :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20758 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-19 21:25:19 +00:00
Travis Geiselbrecht
3095921098 asm optimized user_memcpy(), which should help somewhat, since the old version was a byte-by-byte copy.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20723 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 06:48:38 +00:00
Travis Geiselbrecht
831486a2d3 Turn the assembly optimized memcpy (simple rep movsd) back on for x86. Had to hack around the make system a bit, and the result is pretty nasty, specifically due to the amount of places in the system where various targets poke their fingers into the libroot directory.
The solution is less than optimal, but should work for now.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20722 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-16 06:17:14 +00:00
Axel Dörfler
861b3c0b6f The busy page could also be in another cache that is layered upon the merged one,
so we can't easily check if the remaining mappings are valid - therefore I disabled
the check completely.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20654 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-11 15:50:11 +00:00
Axel Dörfler
1407f23d9b * The test for existing mappings in vm_remove_consumer() was a bit too aggressive;
if the page is currently copied, the source page still has mappings.
* vm_copy_on_write_area() did not set the cache type for the upper cache.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20530 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-03 11:23:37 +00:00
Ingo Weinhold
1e768ed1d3 get_vnode_name():
* read_dir() is supposed to return B_OK and and a count of 0 when
  reaching the end of the directory. In case the node in question could
  not be found, we were looping infinitely.
* free_dir_cookie() was not invoked.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20519 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-03 04:29:24 +00:00
Axel Dörfler
70a11cecbd * pages_io() now handles it gracefully in case the fileVec array is too
small to hold the information for the requested I/O size.
* get_file_map() returned B_BUFFER_OVERFLOW already in case the array
  was exactly as large as needed.
* read_chunk_into_cache() and write_chunk_to_cache() will no longer
  override their local "size" variable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20509 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-02 11:13:03 +00:00
Ingo Weinhold
962b0b887d Added a wrapper function for the invocation of debugger commands. It
sets a fault handler, so that an invalid memory access while executing
the command (address typos always do the trick :-) won't result in
another KDL session on top of the current one, which wouldn't even be
"cont"able.

All pieces of code setting a fault handler do now save and reset the
previous one, so that e.g. a user_memcpy() in a debugger command doesn't
disturb the mechanism.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20500 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-01 17:15:37 +00:00
Ingo Weinhold
9bf1f552d9 Enabled setjmp()/longjmp() support in the kernel.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20499 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-04-01 17:05:26 +00:00
Ingo Weinhold
6e442c70cb Reversed locking order of sImageLoadMutex and sImageMutex in
unload_kernel_add_on(). The former one could lead to deadlocks with
load_kernel_add_on() (e.g. occasionally the boot process would hang).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20485 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-31 23:06:09 +00:00
Ingo Weinhold
57a860987a A few more changes to pages_io():
* Added a few comments.
* Simplified the nested while loops by dropping the special handling for the
  first iovec and restructuring the innermost loop. This also rules out
  the possibility of a zero-length temporary vec. IMHO the readability
  has improved quite a bit (YMMV :-). Hopefully without introducing new
  bugs; please review!
* Corrected computation of totalSize in case less than size has been
  read/written.
* Also set *_numBytes in case all fileVecs have been processed. Only
  relevant in case the request extends beyond the end of file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-31 22:44:01 +00:00
Axel Dörfler
061816eefa * Fixed two bugs found by Ingo: the tempVec array bounds weren't checked when
filling them which could have written over the stack, and their iovec length
  was set for the wrong iovec, potentially clobbering any memory.
* The first tempVec was usually empty, anyway, as the wrong iovec was chosen
  to start from (usually one too early).
* The tempVec loop is now repeated until the whole fileVec is completed.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-31 09:54:56 +00:00
Ingo Weinhold
27d37d4d24 * Optional debug feature for tracking which page queue a page should be
in.
* New debugger command "find_page", which searches all page queues to
  find out, which one a page is actually in.
* Solved nasty race condition between the page scrubber and
  vm_page_allocate_page_run(): The page scrubber didn't mark the pages
  it was processing busy, so that vm_page_allocate_page_run() could claim
  them in the meantime. They would end up in the clear pages queue,
  although being assigned to a cache at the same time. This should
  finally solve bug #1056.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20474 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-30 19:48:51 +00:00
Axel Dörfler
0bfaee2899 parse_line() is now smart enough to detect quoted strings and escaped characters.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20471 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-30 13:44:46 +00:00
Axel Dörfler
3a1532ef98 In case the source cache of the current vm_cache_ref was in the process of
being merged in vm_cache_remove_consumer(), fault_find_page() tried again
with the current vm_cache_ref, but didn't realize it might have had inserted
a busy page in this cache already.
This fixes a deadlock, as this page would never get unbusy again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20470 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-30 12:14:43 +00:00
Axel Dörfler
94d37a4b51 * map_backing_store() did not set the private mapping's cache to CACHE_TYPE_RAM.
* Some more debug helpers.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20469 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-30 09:45:50 +00:00
Axel Dörfler
673a63dc41 Added more checks regarding page movement for debugging purposes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20468 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-30 09:01:58 +00:00
Axel Dörfler
6da6433598 * common_select() now also clears the sets for B_WOULD_BLOCK and any other error
that returns 0. Patch by Hugo Santos.
* Removed superfluous memset() of select_sync structures.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20467 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-29 16:09:53 +00:00
Ingo Weinhold
3e414ec314 Fixed broken iteration in block_cache::RemoveUnusedBlocks(). The loop
would start with the first block in the unused blocks list, but then
continue with the blocks that share the same hash table slot, thus
freeing potentially used blocks. Could theoretically have caused
BFS to see and write incorrect meta/administrative data on certain
occasions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20459 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-28 22:53:45 +00:00
Ingo Weinhold
3f51dabd08 Another fault handler instance where we have to trick gcc4 not to
optimize our code away.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20450 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-28 15:59:51 +00:00
Ingo Weinhold
369e45856b Added TODO.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20435 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-27 13:04:50 +00:00
Axel Dörfler
6c533c4f43 Somehow, the system doesn't run that well when the scheduler skips only rarely; I'm not
yet sure what is causing this, but until I find the time to look into it (or someone else
as part of GSoC), raising the limit helps.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20427 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-26 10:28:39 +00:00
Axel Dörfler
a201ac2cf9 The kernel no longer allows anyone to rename a thread unless you're the current
owner of that thread - this fixes the kernel part of bug #1122.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20419 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-25 12:42:30 +00:00
Ingo Weinhold
6376aa3f7a * The close-on-exit bitmap vfs_new_io_context() created was a byte
short, if the FD table size wasn't a multiple of 8.
* vfs_resize_fd_table() didn't seem to know at all about the
  close-on-exit bitmap. The pointer in the io_context would point to
  free()d memory afterwards. This explains the sporadically closed
  stdin/out/err descriptors in programs started from Tracker and
  Deskbar.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20413 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-23 21:19:02 +00:00
Axel Dörfler
d349f3c941 select() is supposed to clear the sets in case of B_TIMED_OUT - found and patch
by Hugo Santos - thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20412 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-23 20:40:03 +00:00
Axel Dörfler
c0c59f5b2d Accidently unmapped the wrong pages in case of COW after the last commit...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20408 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-23 12:36:24 +00:00
Axel Dörfler
c6a7ff7a9f * The new vm_page_mappings weren't updated correctly in many cases.
* Added a comment to vm_remove_all_page_mappings() that shows that we need to
  change the mapping spinlock into a mutex.
* Pointed out some potential problems in the code.
* Added vm_page_at_index(), vm_clear_map_activation(), and vm_test_map_activation()
  in preparation of the page scanner rewrite.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-23 11:48:37 +00:00
Ingo Weinhold
529bf4045b In a copy-on-write situation a page from a lower cache must always be
mapped fully read-only (for both kernel and userland). Previously a
kernel read access to a yet unmapped r/w accessible userland address
would cause the page from the lower cache to be mapped with write
permission for userland (on x86 also for the kernel) thus e.g.
allowing a fork()ed child process to write to the parent process'
memory.

Fixes bugs #113 and #928.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20402 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-21 19:48:38 +00:00
Ingo Weinhold
44b5d72b5a Added new functions to the debugger API:
{set,clear}_debugger_{break,watch}point(), allowing to set/clear break
and watchpoints for the calling team. When a break/watchpoint is hit,
the team enters the debugger. Handy in situations when the program in
question can't really be started in a debugger (or it would be
complicated to do so). The functions work only as long as no debugger is
installed for the team.

We clear the arch specific team and thread debug infos now, when a new
debugger is installed, thus clearing break- and watchpoints.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20396 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-03-20 16:20:13 +00:00