Commit Graph

1229 Commits

Author SHA1 Message Date
Ingo Weinhold
5b702e5934 "thread" also prints the signal block mask, now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24065 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-22 14:55:10 +00:00
Ingo Weinhold
bc2001bb39 We have to update the pending signals thread flag when restoring the
signal block mask when returning from a signal handler.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24064 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-22 14:54:03 +00:00
Ingo Weinhold
23b95b112d We have to remove the thread's condition variable entries when
interrupted early, i.e. when signals were already pending when we
started waiting. Fixes #1832.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24063 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-22 14:51:11 +00:00
François Revol
ff7eefe8e3 Call debugger_puts hooks on modules when serial debug output is enabled (modules themselves must reject loading if they don't find mymodule_debug_output in kernel settings).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24054 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-21 23:35:44 +00:00
Axel Dörfler
8327c8091f team::parent is NULL in case of the kernel - Expander crashed reliably
when expanding something with it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24047 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-21 16:15:00 +00:00
Axel Dörfler
0dd3108ca0 * Added SIGNAL_FLAG_DONT_RESTART_SYSCALL for send_signal_etc() which
utilizes the THREAD_FLAG_DONT_RESTART_SYSCALL (but only in SIGCONT
  for now).
* resume_thread() is now using that flag to be compatible with BeOS.
* This fixes the Terminal hanging on close.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24045 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-21 13:19:54 +00:00
Ingo Weinhold
2efb87b92f Added TODO: Process groups should live on until the process is reaped.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24042 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-21 01:00:14 +00:00
Ingo Weinhold
562e2f204a * Removed unused team::pending_signals.
* Added team::flags. Currently only used for setting a flag when a team
  has exec()ed.
* Some improvements of _user_setpgid():
  - It failed incorrectly when the target process was a process group
    leader. According to the standard it shall fail when the process is
    a session leader. Moving a process group leader to another process
    group is fine, even if that leaves the group leaderless.
  - Fixed race conditions. We need to recheck the error conditions when
    we hold the team spinlock. Otherwise the situation could change
    while we allocated the new process group. This was one of the
    reasons for bug #1799 -- after the shell fork()'s both parent and
    child invoke setpgid() for the child.
  - Fixed behavior for pid == pgid. It doesn't necessarily mean that a
    new group has to be created.
  - Fixed update of target process group orphaned state.
  - Squashed TODO: setpgid() on a child is supposed to fail after the
    child has exec()ed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24041 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-21 00:46:22 +00:00
Axel Dörfler
db55a020e6 * Started implementing node monitoring in the devfs and device manager.
* Right now, only already known loaded drivers will be monitored for changes;
  their devices aren't republished, though, since that would cause a deadlock
  in the node notification mechanism (listeners are called synchronously);
  need to offload that the event handling to another thread.
* On changes of (known) driver directories, the device manager will now print
  some info to the syslog.
* Fixed republish_driver() I broke recently (would skip every other node), and
  moved it to the driver functions section of the devfs.cpp.
* Implemented currently unused unpublish_driver() function that would have to
  be called before reloading a driver.
* If a driver is in use when it's updated, we mark it, but we don't do anything
  with that info when we could.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24036 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-20 16:55:05 +00:00
Axel Dörfler
9448bb6e0b Added add_node_listener() and remove_node_listener() kernel private functions
to watch a node.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24035 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-20 16:48:16 +00:00
Axel Dörfler
849246ba77 Improved (and tested) the advisory file locking mechanism a bit:
* our flock::l_len was inclusive, while it's exclusive (the last byte locked
  is (l_start - 1 + l_len) not just (l_start + l_len).
* F_UNLCK removes all locks of the calling process that are within the specified
  region - existing locks might also cut or divided.
* Apparently, a single team can lock the same region as often as it wants.
* advisory_locking is now using a DoublyLinkedList instead of its C counterpart.
* advisory_lock now has start + end fields, instead of offset + len, it's
  handier this way.
* This fixes bug #1791.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24020 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-19 19:16:36 +00:00
Axel Dörfler
350e0b20a5 * Simplified devfs_rescan_driver() since the driver hash is now based on the
name of the drivers.
* Allow driver::publish_devices() to return NULL to hint that it has no devices
  to publish anymore (ie. existing devices will be unpublished in this case).
* republish_driver() now also calls load_driver() in case the driver is not
  loaded.
* publish_device() and unpublish_node() now maintain the new
  driver_entry::devices_published field, so we always know how many devices
  a driver has now.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24016 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-19 14:59:30 +00:00
Michael Lotz
b024c395d7 Fix bad error in calculating the leak check info address when updating the
size of a reallocated block. If you had kernel heap leak checking on, this
could have caused the first four bytes of the next block to be overwritten
with the size of the reallocation of the previous block.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24011 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-19 00:42:54 +00:00
Michael Lotz
d4d25a55bd We should lock around register_elf_image() as we modify the image hash in there.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24010 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-18 22:54:12 +00:00
Ingo Weinhold
306fe53248 We forgot to unpublish our temporary condition variable. Since it was
allocated on the stack, condition variable related structures would be
trashed, causing all kinds of problems. Fixes #1811 and #1812.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24009 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-18 21:51:34 +00:00
Axel Dörfler
447c081fe4 * sigsuspend() must only block blockable signals.
* Minor comment cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24000 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-18 12:31:17 +00:00
Michael Lotz
cf46897b4c Use a dedicated heap to allocate everything that is needed during heap growth.
This eliminates the edge case where the grow thread would not be able to create
a new area because no memory could be allocated for the allocation of the area.
As this case cannot happen anymore, it is also not possible to deadlock in
memalign. Therefore the timeout (which would only have prevented the deadlock
but wouldn't have solved the edge case anyway) has been removed too.
Add options to dump the dedicated grow heap and to only print the current heap
count to the "heap" debugger command.

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



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23983 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 15:48:30 +00:00
Marcus Overhagen
4af8877673 build fix for r23929
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23982 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 14:59:52 +00:00
Ingo Weinhold
fe19cba8f0 axeld + bonefish:
Before starting to wait on a condition variable check for pending
signals first, if the call is interruptable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23980 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 14:38:23 +00:00
Ingo Weinhold
7d2d758d46 axeld + bonefish:
Make ktrace_printf() available in the kernel, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23979 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 14:36:47 +00:00
Ingo Weinhold
d63cbbe2df Added "error" debugger command to print the error string for a given
numeric error code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23978 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 14:36:03 +00:00
Ingo Weinhold
25f0ac90a9 axeld + bonefish:
The return value of Inode::WaitForRequest() is status_t not bool. So the
method would always fail when it actually succeeded. This affected reads
from pipes which didn't have data. The bug was hidded since VFS code
mostly checks error codes only against < B_OK, so that such a read would
be treated as 0 byte read.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23976 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 14:34:34 +00:00
Ingo Weinhold
9ae93dcd7f _user_normalize_path() was broken for symlinks in absolute paths.
Fixes #1778.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23969 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-17 13:32:08 +00:00
Michael Lotz
aabef40563 * Add a "stats" argument to the kernel heap leak checker to only print the
total count of allocations and bytes.
* Also add a few more bin sizes (for 8, 24 and 48 bytes) turns out especially
  allocations of 20-24 bytes are pretty common. And as it only wastes a few
  bytes per page this doesn't hurt at all.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23961 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-14 23:16:50 +00:00
Michael Lotz
cf2687e48f Only clear 0xdeadbeef if there is 0xdeadbeef present. The size field of the
heap leak check info would otherwise be overwritten for allocations that still
fit the 16 byte bin (i.e. allocations of 0-4 bytes).

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23956 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-12 22:25:18 +00:00
Michael Lotz
4af6cd5f38 Adding two debug features to the new heap implementation:
* Tracing of allocations, reallocations and frees
* Leak checking infrastructure to dump allocations

The leak checking code records the team and thread id when an allocation is
made as well as stores the originally requested size. It also adds the
"allocations" debugger command that can dump all current allocations (usually
a huge list) or filter by either a team or thread id. This way it's easily
possible to find leftover allocations of no more active teams/threads.
Combined with the tracing support one might be able to track down the time and
reason of an allocation and possibly find the corresponding leak if it is one.
Note that kernel heap leak checking has to be enabled manually by setting the
KERNEL_HEAP_LEAK_CHECK define to 1.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23953 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-12 20:20:35 +00:00
Michael Lotz
75fe8391f9 Fix the build. Apparently this file wasn't recompiled on my end before.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23942 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-10 21:53:53 +00:00
Michael Lotz
5c4d1c5e21 Complete rework of the heap implementation. Freelists are now part of the pages
and pages are now kept in lists as well. This allows to return free pages once
a bin does not need them anymore. Partially filled pages are kept in a sorted
linked list so that allocation will always happen on the fullest page - this
favours having full pages and makes it more likely lightly used pages will get
completely empty so they can be returned. Generally this now goes more in the
direction of a slab allocator.
The allocation logic has been extracted, so a heap is now simply attachable to
a region of memory. This allows for multiple heaps and for dynamic growing. In
case the allocator runs out of free pages, an asynchronous growing thread is
notified to create a new area and attach a new heap to it.
By default the kernel heap is now set to 16MB and grows by 8MB each time all
heaps run full.
This should solve quite a few issues, like certain bins just claiming all pages
so that even if there is free space nothing can be allocated. Also it obviously
does aways with filling the heap page by page until it overgrows.
I think this is now a well performing and scalable allocator we can live with
for quite some time. It is well tested under emulation and real hardware and
performs as expected. If problems come up there is an extensive sanity checker
that can be enabled by PARANOID_VALIDATION that covers most aspects of the
allocator. For normal operation this is not necessary though and is therefore
disabled by default.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23939 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-10 21:00:13 +00:00
Ingo Weinhold
2c986936df Added new syscall _kern_normalize_path() to normalize a path.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23929 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-08 03:06:14 +00:00
Michael Lotz
cfc9593fa8 Fix possible though unlikely SMP issue reported by Robert Szeleney. One must
not use a single static variable to synchronize CPUs at two points. In an
environment where CPUs do not really run concurently (in emulation or with
logical processors) it would be possible for CPUs to get trapped in the first
synchronization while another CPU might just do its thing and change the
sync variable again. These CPUs would then never leave the first loop as the
exit condition has already passed again. The key is to use two different sync
variables like it is done in early kernel initialization. As I didn't manage
to trigger this code though I am not sure if this is gonna work.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23926 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-07 23:19:28 +00:00
Ingo Weinhold
0c221f53a3 Also check the syscall number to avoid problems.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23920 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-07 19:07:26 +00:00
Ingo Weinhold
3d779beaa3 Don't invalidate the syscall number, since that's not handled graciously
in the syscall handler.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23919 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-07 19:06:03 +00:00
Ingo Weinhold
3832c7ec7f Always clear the THREAD_FLAGS_64_BIT_SYSCALL_RETURN flag, even when
using the int 99 syscall method. Otherwise it would remain set e.g.
after _kern_restore_signal_frame() and the next syscall would look like
one returning a 64 bit value.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23918 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-07 19:04:38 +00:00
Ingo Weinhold
385627911c Debug code. From time to time I still see 64 bit return values when they
should be 32 bit only.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23917 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-07 16:04:24 +00:00
Ingo Weinhold
9835c090a6 Added a boolean "force" parameter to thread_yield(). When true, the
function has the old behavior. When false, it just calls the scheduler
without any priority adjustment or other stuff.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23906 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-07 11:40:31 +00:00
Axel Dörfler
0b26e0b1d4 * When removing a media, only the device was unmounted if needed, not its child partitions.
Not sure if this is the right place, Ingo might want to review that one.
* This fixes unmounting sessions of a multi-session CD, ie. the BeOS CD (it currently panics
  when trying to access a device that's not there anymore - for debugging only, of course :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23894 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-06 11:46:44 +00:00
Axel Dörfler
dbc1da17ed * devfs now uses the driver's name instead of its node_ref to see if it
already knows this driver.
* This should also allow to have a driver in home/config/add-ons/... overlays
  a driver with the same name in system/add-ons/...
* This should also fix bug #1750.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23892 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-06 11:13:14 +00:00
Michael Lotz
0d83dc06e3 * Use 0xdeadbeef as an indicator to only conditionally walk the freelist.
This is not safe when already freed memory is overwritten. But since we also
  store the next pointer of the freelist in there, overwriting would break the
  freelist and cause a crash in that case. This gives a drastic performance
  boost when freelists grow during use and especially when opening and closing
  a lot of programs.
* Optimize filling the freed element with 0xdeadbeef by writing 4 bytes at a
  time instead of using single byte writes. Works as all our bins have an
  element size that is a multiple of four. Put a panic in there just in case
  this assumption isn't met for some reason.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23879 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-05 20:21:44 +00:00
Michael Lotz
9a2cc3ad3f * Fix some coding style issues
* Stumbled upon a possible bug while trying to understand the reuse of large
  allocations. The "first" variable was always set to the current index at the
  end of the loop, even if it was already set. This should have caused that
  the success condition to never be reached.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23866 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-04 21:53:57 +00:00
Ingo Weinhold
350b6dbc3a * Removed AbstractTraceEntry::sPrintTeamID and added a flags field to
TraceOutput for output options instead.
* Added "traced" option --difftime. Instead of the absolute system time
  it prints the difference time to the previously printed entry.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23864 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-04 17:54:40 +00:00
Axel Dörfler
08f2fdac37 * "call" now sets some useful debugger variables, like _argX for all arguments,
and _frame for the stack frame.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23849 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-03 18:04:25 +00:00
Axel Dörfler
db18308b90 Fixed the "call" command to actually show the arguments that belong to the
function name it prints.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23846 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-03 17:52:43 +00:00
Michael Lotz
2362422c38 Do not just overwrite the thread state when suspending a thread since this easily causes problems on SMP systems (triggers the panic in the scheduler).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-03 16:18:19 +00:00
Michael Lotz
f87d72d788 Introduce a B_NO_LOCK_VECTOR flag to be used with install_io_interrupt_handler().
When specified it desigantes that the interrupt handler should not lock the
vector with a spinlock when executing the installed interrupt handlers. This
is necessary to allow the same interrupt vector to be handled in parallel on
different CPUs. And it is required for the CPU halt to work synchronously when
there is more than one AP CPU. Though the acquire_spinlock() should cause IPIs
to be processed, only this fixed the SMP_MSG_FLAG_SYNC problem for me.
Not locking is safe as long as it is guaranteed that no interrupt handler is
registered or removed while the interrupt handler is running. We can guarantee
this for the SMP interrupt handlers we install in arch_smp_init() as they are
never uninstalled. Probably this flag should be made private though.
Restored the SMP_MSG_FLAG_SYNC when entering the kernel debugger.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23838 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-03 16:16:17 +00:00
Axel Dörfler
a32a4683ff * Implemented flock() semantics to the advisory locking backend. Not tested
(must also compare to BSD; I've looked at their sources, but I might have
  missed something).
* Added sys/file.h and the flock() system call.
* common_fcntl() could forget to put back the file descriptor on some error
  conditions (I guess we should introduce and use a DescriptorGetter class).
* Cleaned up fcntl.h, moved the BSD extensions S_IREAD and S_IWRITE to
  sys/stat.h where they belong, and added the missing S_IEXEC to them.
* Added some more comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23836 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-03 15:37:31 +00:00
François Revol
82610ec8eb * get rid of ppc stuff
* possible types of exception frames


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23833 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-03 11:39:28 +00:00
Axel Dörfler
5905a0ae34 * Fixed _{kern|user}_{read|write}[v]() functions to not move the descriptor's
file position in case an offset was specified.
* Reverted r23828-r23830 in File.cpp: don't fix the symptoms but the cause
  of the problem (hey, that has to be in the kernel, right? :))
* Cleanup of File.cpp, removed OpenBeOS namespace.
* Moved user_fd_kernel_ioctl() to the section where it belongs to (that
  function should be renamed, though).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23832 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-02 23:50:51 +00:00
Axel Dörfler
987de53746 * Also replaced the cpu store's lock with a recursive lock in order
to fix bug #1731.
* However, it turns out that depot destruction obviously doesn't work
  correctly, at least we keep partial or full slabs around when we're
  using them (which causes the code to panic).
* Therefore, I've now disabled depots completely, until I find the time
  to really work on that code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-02 14:20:33 +00:00
Axel Dörfler
45b17b80d1 * Temporarily switched to a recursive lock for the depot.
* While this is not a really good idea for a lock with supposedly little
  contention, but it'll fix bug #1731. I haven't tested it yet, but will
  do so in a minute :-)
* I will need to rework the slab anyway so that it's possible to use it
  as a replacement for our heap, and then I'll switch back to a benaphore
  again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23822 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-02 12:12:54 +00:00
Axel Dörfler
5ccd99565d Benaphores are nice and fast, but they aren't useful for debugging at
all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23820 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-01 23:05:26 +00:00
Ingo Weinhold
0c6f7530ef syscalls.cpp also includes syscall_numbers.h, now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23809 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-01 12:23:28 +00:00
Ingo Weinhold
a02bbcd455 Renamed "printteam" switch for "traced" command to "--printteam".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23808 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-01 12:21:41 +00:00
Ingo Weinhold
34aae00fe9 Syscall tracing no longer fetches the string parameter of the
_kern_ktrace_output() syscall, since it will be stored in a separate
entry anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23807 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-01 12:15:00 +00:00
Ingo Weinhold
7bb85c7b55 Clarifying comment.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23806 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-01 12:11:02 +00:00
Axel Dörfler
3cec75dc33 * Debugger modules now have two methods: enter_debugger() and exit_debugger().
* The kernel now opens up to 8 debugger modules (and puts them into an array;
  maybe we'll want to switch to a doubly linked list when there is the need).
* Implemented an example debugger module that prints a stack trace of the
  current thread when the kernel debugger is entered (not included in the
  image).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23794 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-31 12:25:43 +00:00
Marcus Overhagen
3cad4dae71 Print ids in decimal.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23780 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-28 23:19:54 +00:00
Marcus Overhagen
7694461ea6 Use decimal for thread ids.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23779 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-28 22:58:02 +00:00
Marcus Overhagen
c486dde9d6 cosmetic
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23778 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-28 22:48:56 +00:00
Marcus Overhagen
fad02fc2ac Print thread ids in decimal.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23777 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-28 22:43:22 +00:00
François Revol
9a507b45d4 Some reorg.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23759 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-27 01:39:28 +00:00
Ingo Weinhold
62c35bb99a Corrected "threads" usage text.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23756 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 22:48:05 +00:00
Michael Lotz
7f5698963f Add concurency handling when entering the kernel debugger. Previously there
was a race condition when more than one CPU would enter the debugger at the
same time (or rather before one CPU could stop all the others). We now use the
inDebugger variable to tell if someone is already in the debugger and then
only process inter CPU messages and retry entering the debugger.
Since sending the synchronous broadcast most of the time hung over here with
SMP enabled I removed the synchronous flag and added a simple spin to give the
other CPUs a chance to process the halt request. Added comments that explain
the reasons and a ToDo to revert to synchronous delivery once we fixed the
problem. The kernel debugger is now usable on my quad core.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23751 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 19:12:22 +00:00
Ingo Weinhold
f2e758e5da Added usage message for the thread-related debugger commands.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23750 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 18:45:35 +00:00
Michael Lotz
36b55f4694 Don't panic in case a thread is not in the wait queue of a sem anymore. On SMP
systems it can easily happen that the thread gets removed from the queue (when
it times out for example) during the time we don't hold the sem lock.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 18:44:23 +00:00
Michael Lotz
1b0e74fc18 Don't clobber the thread variable as we use it again. Since it always is NULL
at the end of that loop we guaranteed a crash when this special handling was
triggered.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23748 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 18:17:12 +00:00
Ingo Weinhold
803a36434d * Used add_debugger_command_etc() and added a usage text for "team" and
"teams".
* "team" without arg prints info about the current team.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 10:47:27 +00:00
Ingo Weinhold
e03ff02033 Set team::name to the last path component instead of to the truncated
path. Makes the "teams" output prettier and "team <name>" becomes
usable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-26 10:36:20 +00:00
Michael Lotz
7e80cf0096 Missed this setting of thread state which is now unnecessary. Otherwise nothing in the kernel seems to mess with the state outside of the scheduler so checking for B_THREAD_RUNNING there should be fine.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23740 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-25 17:37:20 +00:00
Michael Lotz
6761f5a660 Move the handling of still running threads into scheduler_enqueue_in_run_queue().
This should be in line with all uses of scheduler_enqueue_in_run_queue() and
simplifies a few places where it is used.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23738 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-25 15:55:54 +00:00
Michael Lotz
d925650968 Apply the same logic as in r23731 to all other places in the semaphore code
where threads are enqueued into the run queue.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23733 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-25 13:55:17 +00:00
Michael Lotz
2f3f3d79b5 Fix the underlying problem that caused the issue of running threads being
enqueued into the run_queue again. Modified the workaround to a panic in the
scheduler so we notice when something else does the same.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23731 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-25 13:27:00 +00:00
Michael Lotz
bc1dc61522 Implement a workaround for a concurency issue on SMP systems:
A thread that just missed a semaphore and put itself into the sems notify
queue could be enqueued into the run queue by release_sem_etc() of another
CPU before the CPU running the thread had a chance to reschedule it. Therefore
there is a timeframe where a thread can be running on one CPU and already be
in the run queue again. In this case no other CPU may schedule this thread
because then it would overwrite the threads' CPU pointer which kills the rest
of the scheduler logic, smp_get_current_cpu() and everything that depends on
that (like the kernel debugger). The more CPUs you have the easier this could
happen, up to the point where it was always triggered during boot on my quad
core system. The system would freeze and you could not enter the kernel
debugger, because two CPUs thought they were the same and disabled each other
through SMP communication. This makes booting my system stable and might fix
the occasional hang on boot for other SMP systems with only 2 CPUs/cores.
I've put a ToDo comment that details this above the workaround. Maybe we
should fix this in another way. Reviews, comments and suggestions welcome ;-)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23721 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-24 15:14:10 +00:00
Stephan Aßmus
72f7b29018 Limit the number of stack frames we print. Infinite recursions or, even worse,
cyclic stack frames would be seriously annoying.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23712 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-23 21:47:17 +00:00
Axel Dörfler
a39bfc19fd Made the paging mechanism a bit more useful for commands: it will now wait when
the command would overwrite its own output, not always on the bottom of the
screen.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23699 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-22 08:24:35 +00:00
Axel Dörfler
6eabbacd70 * Fixed compare_blocks() function; it actually gets cached_block**.
* Added block_writer thread that continuously writes back blocks for all current
  block caches.
* A block cache now maintains the number of dirty blocks if it doesn't use
  transactions. That knowledge could also be used in block_cache_sync()...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23698 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-22 08:16:04 +00:00
Ingo Weinhold
325b88a661 * Introduced debugger command flag B_KDEBUG_DONT_PARSE_ARGUMENTS.
For commands with this flag set, the parser won't parse the
  arguments provided (it will only check for matching parentheses and
  brackets), but will pass the unparsed argument list string to the
  command instead.
* Set the new flag for the "expr" command, so one doesn't have to quote
  the expression to evaluate anymore (or put it in parentheses).
* Fixed tokenizing of quoted and unquoted strings in expression mode.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 23:25:34 +00:00
Axel Dörfler
5af13da19d * The block cache now sorts the blocks before synchronizing a transaction.
* This should speed up writing a transaction considerably.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23694 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 20:34:06 +00:00
Axel Dörfler
4a67038e56 * Added a new function hash_insert_grow() that grows the hash table when needed.
* Removed the public hash_grow() function again (at least for now, it's only
  private).
* Removed the newSize argument from hash_grow(); it will compute the new size
  automatically.
* The block cache is now using hash_insert_grow() instead of hash_insert()
  which should make hash lookups much faster with some 10 thousand blocks,
  also increased the initial table size from 32 to 1024...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23692 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 19:57:40 +00:00
Ingo Weinhold
5fa74667c5 Changed semantics of "traced" invocation without arguments. Instead of
printing the last 30 entries, it continues the last iteration, thus
making the more common use case more comfortable. The old functionality
is still available via "traced 0".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 17:59:19 +00:00
Ingo Weinhold
b4f58d8758 Renamed syscall_parameters_info structure to extended_syscall_info (and
kSyscallParametersInfos to kExtendedSyscallInfos) and added "name"
field. Now the classes for syscall kernel tracing don't need to lookup
the syscall function symbol anymore, which speeds up printing/filtering
of those entries dramatically.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 15:29:00 +00:00
Ingo Weinhold
a54c125e37 Added experimental ktrace_[v]printf() functions to libroot. Their output
is recorded in a kernel trace entry (if tracing is enabled).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23686 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 15:10:05 +00:00
Ingo Weinhold
64fe37ee89 * AbstractTraceEntry records the team ID too, now.
* Added "printteam" switch to "traced" command, enabling the printing of
  the team ID.
* Added "team" filter to the "traced" command expression language.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23684 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 13:31:27 +00:00
Ingo Weinhold
0bf73dd2f1 Increased the maximum number of command line arguments to a more
comfortable number. Somewhat more complex "traced" filter expressions
tended to exceed the old limit easily. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23683 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 13:09:39 +00:00
Ingo Weinhold
635aca08c5 Removed unused variable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23682 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 13:06:52 +00:00
Ingo Weinhold
56213ff41a Some "traced" command optimizations:
* Made the iterator static, so that it's possible to move from the
  iteration position of the previous invocation to the current start,
  instead of always having to start from the beginning or the end.
* Filtered backward iteration:
  - Restrict the range to dump to the entries between the first and the
    last filter match.
  - Use new FILTER_MATCH entry flag to avoid applying the filter a
    second time in the print loop.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23681 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 11:56:24 +00:00
Axel Dörfler
731262c6dd * Rethought fs_sync(): since we no longer deadlock when calling
vm_cache_write_modified() here anymore since quite some time, it actually
  doesn't make any sense to call the file system's "fsync" method here.
  This should make syncing all file systems much faster when many vnodes are
  in use.
* If a file system doesn't use the file cache, it can still just sync everything
  it needs to in its "sync" method.
* Added a TODO item on how to improve sync speed further, if necessary.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23679 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 10:28:32 +00:00
Ingo Weinhold
6d36996620 * Fixed my fix for make_space() wrapping. It's always a good idea to
write code aligned to what one has written in the comment (or the
  other way around).
* Made trace_entry structure doubly linked, by introducing a
  previous_size member. By using bit fields, shrinking the flags field
  to 4 bits, and not saving the lower two bits of size and previous_size
  (which are always 0 due to alignment), the structure remains 4 byte
  sized and can still address the same entry size.
* kBufferSize is no longer one less than it could be.
* "traced" command:
  - Use static variable for the iteration state rather then cluttering
    the temporary debug variable name space.
  - The <count> parameter can now be negative, in which case the entries
    before (and including) <start> are printed.
  - Added a new optional parameter, specifying the maximal number of
    entries to be filtered. Filtered iteration is beautifully
    comfortable now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23678 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 00:41:45 +00:00
Ingo Weinhold
902425896d Made kputs() available in the kernel and used it for printing debugger
command usage texts, which can be too long for kprintf().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23677 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-21 00:15:33 +00:00
François Revol
f7d4128dfa This should be enough for query_tmap_interrupt.
We use an indirect page descriptor instead of pointing the page to itself like on x86.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23668 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-20 19:53:23 +00:00
Ingo Weinhold
6d986c16fe * Use dprintf_no_syslog() for debug output, since we have interrupts
disabled in most cases.
* Wrapping in make_space() was broken. When wrapping the second time or
  later, sFirstEntry would already be greater than sAfterLastEntry and
  resetting sAfterLastEntry to the beginning of the buffer would
  erroneously "free" all entries between the buffer start and the
  original sAfterLastEntry. If the tracing buffer was small enough,
  the odds were that a not yet fully initialized entry would already
  be re-allocated, causing all kinds of weird behavior.
* When an entry that is not yet fully initialized needs to be
  freed, we let the allocation causing the freeing fail. We can't wait
  for the entry, since we've interrupts disabled and since the entry
  initialization might even try to allocate more (buffer) entries.
* make_space() is now safe to be called in any situation, and
  allocate_entry() will do that, which simplifies things there and
  avoids a few duplicate checks.
* Moved maximum allocation size check from alloc_tracing_buffer() to
  allocate_entry(). Just in case... :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-20 16:11:24 +00:00
François Revol
60db426624 unfinished
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23659 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-20 10:31:08 +00:00
Ingo Weinhold
4c4b14c3bb The "traced" command can now be passed a filter expression consisting of
boolean operators ("not", "and", "or") and filters matching thread IDs
or contained strings.
I'm still not fully happy with the command. It should be possible to
define a filter and then comfortably scroll through the matching
entries. Currently having to specify an index range of the unfiltered
entries is rather unhandy in combination with filtering.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-20 00:34:37 +00:00
Ingo Weinhold
f7a5d9c583 Changed TraceEntry::Dump() to take a TraceOutput& and removed
AbstractTraceEntry::AddDump(char*, size_t).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23655 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-19 22:23:32 +00:00
Ingo Weinhold
ab23dfa7f7 Moved tracing macro definitions into separate tracing_config.h header.
So now there's a central place to enable tracing in general and for
individual components.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23645 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-19 17:24:34 +00:00
Axel Dörfler
5f7a62cfdd * Added debugger command "transaction" and added a new "-t" option to
"block_cache" to dump info about transactions.
* Improved tracing.
* Now uses the new add_debugger_command_etc().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23644 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-19 17:01:26 +00:00
Ingo Weinhold
2477bce504 Added support for userland symbol lookup in "sc" and "call". Having
used it for an hour or so, I really wonder how we could live without it.
:-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-19 16:33:03 +00:00
Ingo Weinhold
1111ffc50b An outermost stack frame (having a NULL previous frame) was
incorrectly recognized as iframe. Fixes the read fault when doing "sc"
for a kernel thread.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23628 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-19 10:56:40 +00:00
Ingo Weinhold
42a5ea091a Oops, "f" is a hex digit, too. Hex numbers with "f" in them work again
in the kernel debugger.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23627 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-19 10:35:55 +00:00
Ingo Weinhold
46cb5cfdd3 When a main thread (i.e. a team) dies, we have to send the SIGCHLD to
its parent while still holding the team spinlock. We were racing with
wait_for_child(), since after the child invoked
team_set_job_control_state(), the parent thread could continue as soon
as the team spinlock was released. The SIGCHLD could thus arrive way
later and interrupt another syscall. This could be reproduced with the
compile_bench.sh script from time to time: When interrupted while
waiting for the next subprocess, the gcc frontend would delete a still
needed temporary file.

The whole thing is actually only a problem, because we don't support
automatic syscall restarts yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23625 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 23:39:13 +00:00
Ingo Weinhold
c964a2f228 Use TraceOutput.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 22:18:42 +00:00
Ingo Weinhold
adf78fdae2 TraceBuffer simplifies things a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 22:17:15 +00:00
Ingo Weinhold
f1047a1c3e Introduced helper class TraceOutput that represents an output buffer
and added AbstractTraceEntry::AddDump(TraceOutput&) method.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23622 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 22:15:30 +00:00
Ingo Weinhold
2f1836da5c Kernel tracing for signals.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23621 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 21:32:38 +00:00
Ingo Weinhold
8d3d1be1ca Kernel tracing of syscalls uses more information about the syscall
parameters, now. We print 64 bit values correctly, and also fetch
strings from userland and print them. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23620 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 19:33:09 +00:00
Ingo Weinhold
8bd6d45df3 * If passed a userland pointer alloc_tracing_buffer_{memcpy,strcpy}()
checks it now. 
* Check for NULL pointer in alloc_tracing_buffer_strcpy(), and also
  determine the length of userland strings before allocating the buffer
  (using user_strlcpy()).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23619 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 19:29:43 +00:00
Ingo Weinhold
aba70a8ca2 Adjusted the fake goto, so that passing a NULL target buffer together
with a 0 size to user_strlcpy() is OK. This way one can use it as a safe
strnlen().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23617 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 19:20:54 +00:00
Axel Dörfler
960f8f2430 * Renamed sBufferStart to sFirstEntry, and sBufferEnd to
sAfterLastEntry.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23614 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 18:35:45 +00:00
Axel Dörfler
f70280a733 * alloc_tracing_buffer() now refuses to allocate more than 65532 bytes;
we use a uint16 size internally (and that has to include the length of
  the trace_entry structure, too.
* We now track how many entries have been written to the log during the
  runtime.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23613 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 18:18:35 +00:00
Jérôme Duval
bbaaf4b7c3 gcc4 requires a cast, so we prepend (void *) to cast every syscall function
fixed syscall.cpp inclusions due to renaming


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23611 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 17:39:43 +00:00
Axel Dörfler
5d0afa4e4e * cache_detach_sub_transaction() didn't really work: it did not put all needed
blocks into the new transaction, but it would set that transaction on all
  blocks of the old transaction, too. Also, it did not correctly update the
  num_blocks/sub_num_blocks fields of the old transaction. Even worse, it did
  return B_OK instead of the ID of the new transaction...
* get_writable_cached_block() did not correctly maintain the number of blocks
  in the sub transaction.
* write_cached_block() did not free the original_data of a block when it wrote
  it back as part of a previous transaction.
* Changed "cookie" for cache_next_block_in_transaction() to "long", so it will
  be 64 bits when needed.
* Improved the API for detaching sub transactions: you can now get the blocks
  of only the main (parent) transaction as well, added new
  cache_block_in_main_transaction() function.
* BFS now flushes the log when there is no space left for the current
  transaction.
* _WriteTransactionToLog() allocated a "vecs" array, but never freed it.
* _WriteTransactionToLog() now also supports detaching the current sub
  transaction if the whole thing is getting too large (it will now also panic
  if that doesn't work out).
* Removed a useless optimization: making the blocks available in the cache
  isn't really needed, as all blocks in a transaction are locked into the
  cache, anyway.
* Implemented Transaction::WriteBlocks().
* Minor cleanup, removed some dead code, fixed warnings in the fs_shell's
  block_cache when compiled with debug output on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23610 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 17:07:18 +00:00
Ingo Weinhold
c3b7f3b979 We weren't correctly clearing the THREAD_FLAGS_64_BIT_SYSCALL_RETURN
flag -- in fact we were setting it -- so after the first syscall with 64
bit return value we were always taking the slow kernel exit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23609 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 15:49:21 +00:00
Ingo Weinhold
a7e979cabb Print the correct usage when too many parameters were given.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23608 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 15:37:51 +00:00
Ingo Weinhold
74652349dd * sEntries only counts the "normal" (i.e. non-buffer) entries, now.
* "traced" command:
  - Was printing one more entry than asked to.
  - Fixed broken index handling. They were starting at 0, but the last
    one was sEntries nevertheless. We consistently let them start at 1,
    now. 0 can be passed as special index, causing the last entries to
    be printed.
  - Added options "backward"/"forward" which will print the entries
    preceding respectively succeeding the ones printed on the previous
    invocation. The command is continuable in this case, i.e. simply
    pressing RET afterwards will reinvoke the command, allowing for
    comfortable scrolling through a long list of entries.
  - Added detailed usage message.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 15:32:02 +00:00
Ingo Weinhold
548dcc600e * syscalls.c -> syscalls.cpp
* With post syscall debugging enabled, the x86 syscall handling didn't
  remove all parameters from the stack after calling the respective user
  debugger hook. Should have been harmless though, since the following
  code didn't rely on the stack being in order.
* Added syscall pre/post (kernel) tracing functions
  trace_{pre,post}_syscall(). They are generic, but need to be invoked
  by the architecture specific syscall code. Currently only done for
  x86.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23600 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 02:13:27 +00:00
Ingo Weinhold
21c92a08d4 * Don't invoke the TraceEntry destructor for simple buffer entries,
since that's seriously unhealthy.
* Added TODO that uninitialized entries must not be discarded.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23599 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 02:04:04 +00:00
Ingo Weinhold
21e73322d8 Also trace set_job_control_entry() and wait_for_child().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23597 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-18 00:01:32 +00:00
Ingo Weinhold
bd0689e668 Added usage message to "cvar" and "cvars" debugger commands and define
temporary variables.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23596 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 23:22:29 +00:00
Ingo Weinhold
5aee691ed8 The "sem" and "port" debugger commands set some temporary variables,
now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23595 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 23:07:59 +00:00
Ingo Weinhold
19b468ea24 * Cursor up/down stop before empty (i.e. unused) history lines, now.
* Added support for page up/down (works like in bash).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23588 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 15:29:27 +00:00
Ingo Weinhold
20fb39b662 Translate PAGE UP and PAGE DOWN keys to respective escape sequences.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23587 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 15:27:40 +00:00
Ingo Weinhold
ce637fda24 Added usage (respectively more detailed usage) messages for "sem",
"sems", "port", and "ports" debugger commands.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23586 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 14:40:07 +00:00
Ingo Weinhold
224aee3ffc sem.c -> sem.cpp, port.c -> port.cpp
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23585 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 14:04:06 +00:00
Ingo Weinhold
e6a8dfa805 The usage string directly printed by print_debugger_command() and
invoke_debugger_command() is now automatically preceded by
"usage: <command name>", so the string passed to
add_debugger_command_etc() shouldn't contain it anymore. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 13:58:17 +00:00
Axel Dörfler
53f7979709 * Fixed a deadlock (and resolved TODO): we need to make all pages unbusy again
before releasing our cache reference. Otherwise removing a vnode (triggered
  by releasing the cache in our thread) could need pages we still own.
* Put the caches and pages into a union to save stack space; they are not
  needed at the same time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23580 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 08:21:48 +00:00
Axel Dörfler
06958f901c We generally handle NULL pointers in free() and friends gracefully.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23578 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 08:06:54 +00:00
Ingo Weinhold
72fa2c51eb Added tracing for fork() and exec().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23577 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 01:59:17 +00:00
Ingo Weinhold
0b60583fec Added convenience functions alloc_tracing_buffer_{memcpy,strcpy}().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23576 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 01:58:08 +00:00
Ingo Weinhold
e613499224 Gracefully ignore NULL pointers passed to block_cache::Free(). Fixes
panic when sync'ing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23575 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 00:14:09 +00:00
Ingo Weinhold
c21af3b299 Print the missing object.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-17 00:11:26 +00:00
Ingo Weinhold
8a90d12e26 * Added add_debugger_command_etc() which is similar to
add_debugger_command(), but additionally takes parameters "usage"
  and "flags".
* Added add_debugger_command_alias() which creates another name for an
  existing command.
* Added print_debugger_command_usage() to print a command's usage.
* invoke_debugger_command() intercepts invocations with "--help" and
  prints the command's usage text, if it is known. If unknown, the
  command will be called normally.
* Made use of the new functions in debug.cpp.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23573 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 23:41:20 +00:00
Ingo Weinhold
1839792524 Change parse_expression() return value from uint32 to uint64.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23571 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 22:55:39 +00:00
Axel Dörfler
33965e022a Enabled paging for the boot debug output as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23570 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 22:09:02 +00:00
Ingo Weinhold
06f78e9fb7 * Changed the way temporary variables work. They won't be unset before
a command is executed anymore. Instead the least recently used
  temporary variable is overwritten, if there's no free slot for a new
  temporary variable.
* Removed the special handling for the command result variable ("_"). It
  just works like any other temporary variable, now.
* Individual temporary variables can be removed (e.g. using the "unset"
  command).
* Added unset_all_debug_variables() and "unset_all" command to unset
  all persistent and temporary variables.
* Removed remove_all_temporary_debug_variables and renamed
  remove_debug_variable() to unset_debug_variable().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23568 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 21:50:59 +00:00
Axel Dörfler
a96e7cce98 * Replaced my block allocator code in favour of Hugo's slab allocator
(so we can't allocate more physical pages than virtual address space
  anymore, but so what?).
* Used the new CACHE_LARGE_SLAB flag as a temporary work-around; else
  the slab would easily create several thousands of areas, which our
  area code (and kernel heap) can't really handle that well (gets 
  awfully slow).
* Block caches with the same size could share the same slab, but we
  don't do that yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23567 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 20:43:12 +00:00
Axel Dörfler
855ab2b312 * Based on ahwayakchih's blue screen paging code (see bug #1444), I added
paging support to KDL (but not the on-screen debug output for now).
* Defaults to "on", use the new "paging" KDL command to turn it off (or on
  again).
* When pressing 'q' while it is waiting for a key, it will now eat the rest
  of the commands output (helpful for slow screen output of a large data set).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23566 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 20:39:00 +00:00
Axel Dörfler
b9074efcb7 * Fixed the "vnodes" KDL command when called without any arguments.
* Fixed the usage text of the "help" KDL command.
* Made the "ambiguous command" warning shorter, so that it will still fit in
  the exception buffer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23565 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 20:36:27 +00:00
Axel Dörfler
c6ee79ce38 * vm_create_anonymous_area() now accepts B_ANY_KERNEL_BLOCK_ADDRESS.
* As a temporary work-around for the current slab allocator's area usage,
  I added the CACHE_LARGE_SLAB flag, which will force the allocator to 
  use larger areas.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23564 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 20:30:16 +00:00
Axel Dörfler
abf34addc5 * B_ANY_KERNEL_BLOCK_ADDRESS now aligns the memory on the next power of two
value greater or equal its size (actually untested, but at least Haiku
  still boots with these changes :-)).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23563 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 19:09:01 +00:00
Axel Dörfler
dd80f32ac3 * Added support for the "--help" argument for all VFS debugger commands.
* Added some temporary variables to the commands.
* Use parse_expression() where appropriate.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23556 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 09:21:54 +00:00
Axel Dörfler
fd81fd526a * Fixed the "unset" command and added useful error output (faulted before).
* Fixed removing temporary variables (they would always be removed except one
  after the first command).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23555 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 08:59:58 +00:00
Ingo Weinhold
5c62817c6f Added unary "*" operator for dereferencing addresses to the
debugger expression language. By default it reads a uint32 value.
Another target size (1, 2, 4, or 8 bytes) can be specified in braces
after the "*" (e.g. "*{2}address" for uint16).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23551 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 03:55:19 +00:00
Ingo Weinhold
15f1e19781 * Added support for the "--help" argument to some debugger commands.
* The kernel debugger does now define some temporary variables when
  entered (current thread and team, etc.).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23549 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 01:14:40 +00:00
Ingo Weinhold
3b4fa1664e * Implemented parse_expression(). The back-end is an expression parser
that is a little more powerful than BeOS'. It features:
  - Persistent and temporary uint64 variables. The former kind is set
    only by the user. The latter (those prefixed "_") can be set
    automatically by commands, thus e.g. making it easier to access
    members of a dumped structure. They are unset when the next command
    is invoked. The special temporary variable "_" is defined as a
    command's return value.
  - Expressions can contain nested command invocations using brackets
    ("[ ... ]").
  - Command lines are parsed by the expression parser, too. They can
    contain command invocations (in brackets) and expressions (in
    parentheses).
* Added debugger commands:
  - expr: Evaluates the given expression and prints the result.
  - unset: Undefines a variable.
  - vars: Prints the values of all defined variables.
* Moved debugger command code into its own source file.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23546 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-16 00:01:20 +00:00
Axel Dörfler
8264ebf6b7 * Improved block allocation.
* Made the block_cache KDL command dump a bit more useful info (number of
  referenced and dirty blocks).
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23540 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-15 18:03:33 +00:00
Axel Dörfler
c87ef6db88 Made Haiku behave better when you have more memory:
* with 1 GB or more, the semaphore limit is now 131072 instead of 65536.
* double the heap when there is 1 GB or more (64 MB).
* the low memory handler now also watches semaphore usage; in the end,
  we need a low resource handler, not a low memory handler.
* create_sem_etc() no longer calls vfs_free_unused_vnodes() directly as
  this could actually deadlock (at least because the address space is a
  R/W lock, not a recursive lock).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23538 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-15 16:47:26 +00:00
Axel Dörfler
36a3ef573d * "traced" now always prints the index numbers (before, it only did that
when a pattern was involved).
* alloc_tracing_buffer() no longer allocates anything when you ask for
  a zero byte buffer.
* Fixed warning.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23533 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-15 15:06:15 +00:00
Axel Dörfler
502c464081 * Added tracing support for transactions.
* improved the "block_cache" KDL command: it can now also dump blocks,
  added support for the "--help" argument.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-01-15 15:04:31 +00:00