Commit Graph

1163 Commits

Author SHA1 Message Date
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