Commit Graph

1229 Commits

Author SHA1 Message Date
Jérôme Duval
b20d05b4f7 clean up, comments, header
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24452 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 21:25:34 +00:00
Stephan Aßmus
c2de9613a6 Fixed 32 bit versions of blit*.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24450 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 20:45:07 +00:00
Stephan Aßmus
55ef60a5ae * Removed the Copyright image/rendering.
* Fixed the icons image, it was upside down.
* Support the new 24 bit boot screen images in the boot_loader and the kernel.
* Prepare the code for future indexed versions of the boot screen images.
  But the generate_boot_screen tool currently does not generate those.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24449 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 20:27:47 +00:00
Axel Dörfler
e9d948ce2d * entry_ref_to_vnode() now gets a "traverse" argument, so that it is
able to resolve symlinks.
* file_open_entry_ref() now evaluates the openMode and passes the
  correct "traverse" argument to entry_ref_to_vnode(). This fixes bug
  #1932 (symlink refs wouldn't be resolved).
* dir_open_entry_ref() now always resolves symlinks, all other uses of
  entry_ref_to_vnode() keep their previous behaviour, though.
* Fixed warnings; since Ingo's header changes, NULL now causes a warning
  when it is used as int.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24442 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 16:10:04 +00:00
Stephan Aßmus
7d85665d0f * Give boot stages a more meaningful name, make the max stage count known.
* Calculate icon offset from stage in splash.cpp, remove hard coded placement
  values. Draw only icon, not the whole image from top/left to right of
  icon.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24439 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 13:14:18 +00:00
Ingo Weinhold
48e299e2ef Fixed warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24438 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 12:26:50 +00:00
Stephan Aßmus
61a1f36f79 * Implemented 32 bit cropped blit. Untested. I am guessing that the functions
could be refactored to avoid code duplication (ie only cropping
  implementations, with the non-cropping function being a special case of the
  cropping version)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24436 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 11:18:38 +00:00
Stephan Aßmus
10134c6d28 * Apply coding style a little more firmly.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24435 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 11:09:13 +00:00
Stephan Aßmus
aa727f6643 patch by Artur Wyszynski (aljen):
* Added the feature of an animated boot screen (icons lighting up at
  different boot stages).
* Added first version of new boot splash images, generated by the new
  hsbg tool. (Also finally contains the "new" Haiku logo.)

changes by myself:
* Added Artur to the contributors list in About System.
* Fixed some left overs in the patch, kept tracing turned off.

TODO:
* Remove the need for hard coding the icon positions. (Maybe generate
  those from hsbg and put them into images.h? Have user provide icon
  spacing/offsets at the command line for hsbg?)
* Rename the stages to something meaningful.
* Use hsbg as a build system tool and generate images.h during build
  from PNGs provided in the artwork folder.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24434 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 10:25:53 +00:00
Stephan Aßmus
45ae49e9c5 patch by Artur Wyszynski (aljen):
* update the kernel copyright string


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24432 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 10:11:58 +00:00
Ingo Weinhold
8b76a59a0d Fixed race condition in the page writer: The state of the page we have
picked might have changed while we were locking its cache. Might fix
#1931.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24430 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-18 02:39:04 +00:00
Ingo Weinhold
1b32947d3f * Aligned the semantics of the read_symlink() FS module hook with the
readlink() function. It is no longer required to null-terminate the
  string, shall not fail, if the buffer is too small, and shall return
  the length of the string actually written into the buffer.
* Adjusted rootfs, devfs, and bfs accordingly. Also adjusted their
  read_stat() hooks to return the correct symlink length in st_size.
* Our readlink() does now comply to the standard (and BeOS).
  Additionally if the buffer is big enough it is nice to non-conforming
  apps and null-terminates it.
* BSymLink::ReadLink() explicitly null-terminates the string now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24425 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-17 21:37:40 +00:00
Jérôme Duval
4f893e39ab algorithm to find best suited mtrr values to match a memory region. tested ok with 3071MB.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24424 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-17 19:50:46 +00:00
Axel Dörfler
0cbc783bc0 * _user_uninitialize_partition() never marked the partition unbusy
again. This fixes bug #1928.
* Added license header.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24421 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-17 13:11:35 +00:00
Axel Dörfler
6011cc673f * Implemented SetContentName(), and SetContentParameters().
* Added license.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24420 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-17 13:07:57 +00:00
Ingo Weinhold
5513309cb4 Use a union instead of the macro.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-15 18:49:48 +00:00
Michael Lotz
f4af1fba51 Use the empty_index field as the allocation_id for large allocations and just
use the index of the first page of the allocation as an id. This removes the
need for separate id generation. This also fixes the possible problem of
multiple large allocations getting the same allocation_id (due to the limited
range of possible ids), which in the worst case (i.e. for adjacent allocations)
could cause pages to be freed that were still in use.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24405 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-15 17:35:34 +00:00
Axel Dörfler
fe8b72bc69 Applied patch by Vasilis:
* Fixed various warnings with GCC4 due to the double sHaikuRevision line.
* Turned system_info.c to a C++ file.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24404 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-15 16:59:30 +00:00
Ingo Weinhold
fae99f156e cached_block::Compare() was ignoring the upper 32 bit of the block
number. Was a problem only for partitions > 2^32 * block size (4TB
for 1KB blocks).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24393 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-14 22:03:26 +00:00
Ingo Weinhold
6044b22ddb Added new macro SYSCALL_TRACING_IGNORE_KTRACE_OUTPUT to disable tracing
for the _kern_ktrace_output() syscall.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24392 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-14 21:58:17 +00:00
Ingo Weinhold
2b0b4bee36 store_acquire_unreferenced_ref() saves the pointer of the vnode it got
from the call to vfs_get_vnode() now. Only this way it is safe to call
store_release_ref() later (as the page writer does). We had a potential
race condition -- if called after vm_cache_remove_consumer() had
released the last reference, the old vnode might already have been
deleted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24386 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-13 23:41:14 +00:00
Ingo Weinhold
74d93b3526 With syscall kernel tracing enabled, the syscall return value (%eax,
%edx) was trashed before passing it to the user debugger. strace shows
the correct return values again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24364 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-11 21:29:44 +00:00
Ingo Weinhold
4eb3560949 * Added real, effective and saved set- user and group IDs to the team
structure. They are properly inherited and updated on
  fork(), load_image(), and exec().
* Implemented the get[e]{u,g}id(), set[[r]e]{u,g}id() family for real.
* getgroups() also calls the kernel now, but only returns the effective
  group ID. Supplementary groups support is still missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-11 17:12:02 +00:00
Ingo Weinhold
f542307a98 We didn't copy the close-on-exec flags on fork(), thus always leaving
all FDs in a fork()+exec()ed child open. Makes Perl test
t/run/cloexec.t pass.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24336 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 18:00:17 +00:00
Ingo Weinhold
4a7f236b07 Process groups are now reference-counted. Processes in a group as well
as the death entries of a deceased processes that were in this group
and have not yet been reaped hold references to the group, so that it
won't be deleted until the group is empty and all gone group members
have been reaped. This fixes #1799 at last.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24335 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 17:56:27 +00:00
Ingo Weinhold
6e4432bc6f Add a tracing entry when executing a signal handler.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24333 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 17:45:52 +00:00
Ingo Weinhold
c1de3c34b3 Added deferred_free() function, that can be used to free allocations
in code that has interrupts disabled. The chunks of memories are queued
and free()d periodically by a kernel daemon.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24332 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 17:44:55 +00:00
Axel Dörfler
3c0020ae42 * Accept case insensitive boolean values.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24326 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 15:26:29 +00:00
Axel Dörfler
3f89bce410 * The module code now uses find_directory() and no hard-coded paths anymore.
* It now also supports the common directory path.
* search_module() checked the module paths in the wrong order, ie. it preferred
  modules in the system directory over the user directory.
* Clarified comment in vfs_get_module_path().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24323 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 14:21:04 +00:00
Axel Dörfler
fa28330bbf * Explained under which circumstances vnode_path_to_vnode() will clobber the
buffer of the provided "path" argument.
* Applied patch by Vasilis to fix some warnings when build on Linux (missing
  const on certain functions). We should probably fix the original
  {add|remove}_debugger_command() functions in Haiku as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24322 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 13:43:38 +00:00
Michael Lotz
d1189f0b05 Naive implementation of transfer_area(). It follows the suggested sematics
of the resolved ToDo, but could probably be made more efficient. Instead of
transfering the area, the area is cloned into the target teams' address space
and the original is deleted. This generates a new area_id for the transfered
area (as suggested by the ToDo). Updated syscall prototypes according to the
status_t to area_id return type change.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24320 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-09 12:56:59 +00:00
Axel Dörfler
d1893d6468 * Driver probe code now uses find_directory() to get the directories to
look for drivers (also added common directory).
* Now also honours the B_SAFEMODE_DISABLE_USER_ADD_ONS setting.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24316 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-08 23:14:06 +00:00
Axel Dörfler
637eef896b * Added a get_safemode_boolean() function for easy access to the safemode
options.
* module_init() now sets sDisableUserAddOns to whatever the safemode settings
  say, ie. the B_SAFEMODE_DISABLE_USER_ADD_ONS setting is now respected by
  the module code.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24315 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-08 23:12:46 +00:00
Jérôme Duval
dbba758fad added traces
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24245 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-05 21:05:13 +00:00
Jérôme Duval
2d2212bd71 here with 3GB of memory, a 4GB MTRR slot is being written, which triggers a reboot.
we now split more than 2GB MTRR slot, we might improve this and split more and more.
this could fix the bug #1711.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24244 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-05 20:06:18 +00:00
Axel Dörfler
753a97024e * This fixes the broken count of unhandled interrupts which caused some
problems in the past (it only worked for level triggered interrupts).
* Of course, the actual problem is that on current hardware we detect
  almost all interrupts as edge triggered...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24239 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-04 21:49:40 +00:00
Axel Dörfler
7dbbb04a3b * Since the device hooks can actually change when the driver is
republished, we now update them.
* This fixes occasional crashes with reloaded/repulished drivers.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24237 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-04 17:03:25 +00:00
Axel Dörfler
daa6f66e11 * Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24236 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-04 16:59:59 +00:00
Axel Dörfler
890c615aee * unload_elf_image() never unloaded any image because the ref_count
check was wrong (never gets below zero if everything goes as 
  intended).
* Removed erroneous white space.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24232 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-04 12:36:53 +00:00
Axel Dörfler
57b9fd2d91 Applied patch by Olivier Coursière: this should help rebooting on some
machines, and fixes bug #1884, thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24202 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-03-02 13:51:17 +00:00
Axel Dörfler
0c415f6265 "leaf" may be NULL, fixed crashing bug I introduced with
vfs_entry_ref_to_path().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24154 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-27 17:36:21 +00:00
Axel Dörfler
a77ed12b25 * Removed obsolete "ident" parameter from devfs_publish_device().
* driver_entry::api_version now stores the actual version instead of a
  pointer to it.
* Renamed node_path_entry to path_entry and reused it for driver 
  reloading: handle_driver_events() will now also check for drivers to
  add in the sDriversToAdd list.
* Added new devfs_driver_added(), and devfs_driver_removed() functions
  that trigger certain driver actions.
* Implemented notifying devfs on B_ENTRY_CREATED, B_ENTRY_REMOVED, and
  B_ENTRY_MOVED events in probe.cpp. The watched directory inode numbers
  are now stored in a hash for B_ENTRY_MOVED.
* unpublish_driver() did not actually delete the node, it only marked
  it removable since we never get/put the node. We now do, and so the
  node is actually removed as intended.
* Added "devfs_driver" KDL command.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24152 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-27 16:55:59 +00:00
Axel Dörfler
4f26630d82 * Factored a vfs_entry_ref_to_path() out of _user_entry_ref_to_path()
and made it public (within the kernel).
* _user_entry_ref_to_path() is now using that function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24151 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-27 16:39:32 +00:00
Michael Lotz
6dffd08db7 Hopefully this is a good compromise. If more than 99% of the interrupts of a
vector are unhandled, it is disabled if it is not a shared interrupt vector
(as before). Otherwise a message is printed to indicate the condition. I
reduced the amount of interrupts to 10000, as with 100000 it would take over
half an hour on my machine to trigger. Feel free to adjust.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24146 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-26 20:54:04 +00:00
Axel Dörfler
e6fdb84b92 * If path equals "" it won't be published anymore.
* load_driver() now uses republish_driver() instead of publishing all
  devices every time. This allows published nodes to remain stable, no
  matter if the driver has been unloaded in the mean time or not.
* Offloaded driver reloading to a kernel daemon. Since this is regarded 
  to happen rarely, a simple event variable will be set when something
  happened, and the daemon will then check all known drivers.
* devfs_open() will now check if the driver has to be reloaded, and will
  do so before opening the device.
* Moved republish_driver() around again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24141 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-26 14:54:41 +00:00
Axel Dörfler
ee0a072929 * While it was broken before, having the devices_used counter updated in
{get|put}_node() is not really what we want either; moved the maintenance
  into the open() and free_cookie() hooks.
* This should fix driver reloading on change for drivers that have been used
  before.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24135 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-26 10:41:43 +00:00
Michael Lotz
c0f9f1b158 Do not disable interrupt vectors for shared interrupts when more than 99% are
unhandled. Otherwise it brings more trouble than it solves as it also disables
the interrupt of other devices (most often USB or network).

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24120 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-25 18:56:18 +00:00
Axel Dörfler
351b7a2d24 * Added B_WATCH_INTERIM_STAT, and B_STAT_INTERIM_UPDATE definitions to
NodeMonitor.h.
* The latter will be set in "statFields" for interim updates when you have
  asked to get them via the former.
* BFS now uses the B_STAT_INTERIM_UPDATE flag for sending updates to actively
  written files.
* This makes us more compatible with BeOS again; if you only asked for
  B_WATCH_STAT, you will now only receive a notification if the file in
  question has been closed.
* Tracker now uses B_WATCH_INTERIM_STAT to always get all updates (ie.
  downloading a file will update its size and modification time in Tracker
  periodically during the download).
* Wether "needsTrimming" was true or not has no influence on wether or not
  the size index needs to be updated in BFS - only the actual file size is
  stored there, not the on-disk size.
* Added a TODO comment in Inode::WriteAt() that it would actually need to
  update the size index when changing the file size, not when the file has
  been closed (but that's probably too slow).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24114 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-25 13:54:30 +00:00
Ingo Weinhold
20e4f92cf5 switch_sem_etc() doesn't check the return value of add_timer(), hence we
need to make sure that we never get that far with a negative timeout or
we'll wait forever.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24083 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-23 16:01:59 +00:00
Ingo Weinhold
098adfe889 common_select/poll(): Consider all negative timeout values as infinite
timeout, not just -1. Paranoia only, since that should happen anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24082 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-02-23 15:59:30 +00:00
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