Commit Graph

2234 Commits

Author SHA1 Message Date
Michael Lotz
139e442a62 Update the driver path and set binary_updated when we encounter a driver with
the same name but different path. In case of usb_disk that is now loaded as
a boot module the driver got registered with a different path, which prevented
later rescans from working. USB mass storage should now work again.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-08 14:09:51 +00:00
Jérôme Duval
f7c655c7e0 find_nearest() now saves a solution when reaching the max number of solutions and not near enough
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25859 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-08 01:11:29 +00:00
Michael Lotz
5e760150c2 * Add read, write and total count to the ports KDL command so one can see
what the ports of a team are up to without having to go through each port
  individually.
* Enlarge the port id column so even large ids fit nicely.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25857 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-08 00:23:17 +00:00
Jérôme Duval
75d2085651 fixed listdev and device_manager syscalls
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25833 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-06 22:23:25 +00:00
Michael Lotz
45b959656f Missed that file in the commit for r25812.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25816 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-05 23:36:24 +00:00
Michael Lotz
f5b3a6a796 * Initialize all static mutexes in the kernel through a MUTEX_INITIALIZER()
and remove the then unneeded mutex_init() for them.
* Remove the workaround for allowing uninitialized mutexes on kernel startup.
  As they are all initialized statically through the MUTEX_INITIALIZER() now
  this is not needed anymore.
* An uninitialized mutex will now cause a panic when used to find possibly
  remaining cases.
* Remove now unnecessary driver_settings_init_post_sem() function.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25812 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-05 23:19:27 +00:00
Michael Lotz
2b31f85c9e Fix two warnings caused by previous commit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25811 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-05 22:18:31 +00:00
Michael Lotz
a9fbc5482c Give the debugger add-ons a chance when reading input characters. They already
got a debugger_getchar hook, it just wasn't used yet. Not that there would be
any debugger add-on implementing that hook currently...

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25809 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-05 21:16:34 +00:00
Michael Lotz
22b2f0e6b5 * Panic when trying to lock a mutex twice from the same thread. Should make
mutex deadlocks more obvious.
* Fix wrong function name in panic string.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25808 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-05 21:01:47 +00:00
Michael Lotz
065ef7eb5f Replace the legacy driver mutex with a recursive lock. This fixes the deadlock
when hot-plugging a USB mass storage device. The legacy driver (usb_disk in
this case) was rescanned which locked the legacy driver mutex. The insertion
of the new device node caused the disk device manager (notified through node
monitoring) to try to scan the new node. As opening the node triggers
LegacyDevice::InitDevice() that locks the legacy driver mutex again a deadlock
occured.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25807 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-05 18:58:03 +00:00
Michael Lotz
9223644a02 Add a welcome message including the revision number when initializing the
syslog so syslogs always contain the revision number too (as does serial
output).
This is only necessary because the early part of the serial output (that
contains the revision number) does not make it into the syslog. So fixing that
might be the better way.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25804 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-04 18:37:29 +00:00
Michael Lotz
01e46bdb18 * Extract the KDL keymap to a separate header and provide a 'sg' swiss german
keymap there too.
* Add a config header where one can select what KDL keymap should be used
  (currently only 'us' and 'sg' are available though).
* Provide a third keymap that is used when the alt modifier is used (the swiss
  german keymap is pretty useless without alt as all the useful keys like
  backslash and curly braces use alt).

Our KDL is so powerful and nice to use, the only thing that bothered me was
that I always had to think about where some of the special keys are located in
the US keymap. So this simple compile-time keymap switching provided to be
helpful for me and might be for others too. Keymaps for other layouts obviously
have to be written before this becomes really useful.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25803 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-04 17:56:30 +00:00
Axel Dörfler
fd7ff3cfc8 * While it's okay to allow nodes with fixed children to register their own
children, you either have dynamic or fixed children, never both.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25801 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-04 10:50:06 +00:00
Axel Dörfler
0dedf9f081 * Removed the now superfluous pnp_devfs.h header.
* There was a leftover in devfs that still needed it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25800 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-04 10:38:59 +00:00
Jérôme Duval
5b8d33bd75 * some typos
* a driver can register children and have a fixed child (ie for a bus manager).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25799 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 21:05:58 +00:00
Axel Dörfler
d16ddc579c * The boot loader now passes on its EDID info to the kernel, and that will
be put into a boot_item in frame_buffer_console_init().
* The VESA driver now supports gettings the EDID information as well; this
  is necessary now, since the app_server no longer takes over the mode the
  boot loader had chosen.
* Note, we might want to do this via vm86 instead in the future, and remove
  the kernel part again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25786 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 15:17:59 +00:00
Ingo Weinhold
2a33a944e5 Don't spam to the standard output when not finding a symbol.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25784 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 15:05:16 +00:00
Ingo Weinhold
992330f54b _user_debug_output() used kputs() and thus wouldn't print anything
anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25783 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 15:04:09 +00:00
Axel Dörfler
8b07bbe108 * Added a bit more debug output when enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25780 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 13:30:45 +00:00
Axel Dörfler
557335a991 * device_nodes now have a priority that is used to sort them when they are
added to their parent. Currently, only the existence of B_FIND_MULTIPLE_CHILDREN
  influences the priority.
* This makes it possible to register/probe intelligent busses earlier than
  simple/generic busses.
* Reenabled the ISA bus manager using the new device architecture; the
  ide_isa driver can and will now actually work.
* device_node::Probe() now sets the global sGenericContextPath for generic
  nodes. This causes a special handling in _GetNextDriverPath().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25779 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 13:22:24 +00:00
Axel Dörfler
2ecef3acbe * As Korli pointed out, I got a bit confused with Rescan() vs. Probe().
* Therefore, device_manager::rescan_node() now actually causes the
  driver::rescan_child_devices() function to be called, instead of probing
  again.
* Added a device_node::Reprobe() method that does what Rescan() did previously.
* Probe() should now also work with "dumb" busses that don't support type
  information - it will now probe all of these nodes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25778 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 09:13:04 +00:00
Axel Dörfler
7830589f02 Patch by Vasilis Kaoutsis:
* Added a missing close_module_list().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25777 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 07:28:04 +00:00
Michael Lotz
83d453239c Directly use memalign instead of malloc to safe one indirection.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25776 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 06:56:24 +00:00
Michael Lotz
b4babdf47e Move the device deletion after the unpublish call. Fixes crashes where a
device is still referenced through the devfs and used right between deleting
and unpublishing.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25775 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 06:53:57 +00:00
Stefano Ceccherini
fa827b37fc took the liberty to add this to the buiild and fix compilation :)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25774 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 05:02:59 +00:00
Stefano Ceccherini
54d9d37f9d Added patch by Dustin Howett: header with HPET definitions and (empty)
file for hpet implementation. Not yet added to the build.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-03 04:37:18 +00:00
Ingo Weinhold
0cb2617fa5 Before starting to wait the undertaker does now check whether there's
already a dead thread available. Fixes a race condition.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25754 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-02 04:34:09 +00:00
Ingo Weinhold
1c8de8581b * Added optional spinlock contention measurement feature. Enabled when
B_DEBUG_SPINLOCK_CONTENTION is defined to 1. It typedefs spinlock to a
  structure (thus breaking BeOS binary compatibility), containing a
  counter which is incremented whenever a thread has to wait for the
  spinlock.
* Added macros for spinlock initialization and access and changed
  code using spinlocks accordingly. This breaks compilation for BeOS --
  the macros should be defined in the respective compatibility wrappers.
* Added generic syscall to get the spinlock counters for the thread and
  the team spinlocks.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25752 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-02 02:04:12 +00:00
Axel Dörfler
032f1e5f90 * Fixed an endless loop when using vfs_get_vnode_name() or the "wrong"
get_vnode_name() variant.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25750 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-01 18:47:18 +00:00
Jérôme Duval
19b07e67d2 when acquiring results in an error, the resource should be reset to avoid a crash on delete
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25748 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-01 15:27:00 +00:00
Axel Dörfler
710b77326d * vm_cache::virtual_size is not always a multiple of B_PAGE_SIZE for files.
In these cases, the last partial page would have never been written back.
* This fixes bug #2282, and eventually others.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25747 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-01 10:53:10 +00:00
Ingo Weinhold
123dfa78e5 Enforce 80 columns maximum line length.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25746 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-01 02:40:08 +00:00
Rene Gollent
3104402815 gcc4 build fix.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-01 02:36:47 +00:00
Ingo Weinhold
73aa393d73 * Introduced pipes in the kernel debugger. The syntax is similar to
pipes in the shell, though the semantics is a little different: The
  second command is invoked whenever the first command has written a
  complete line. The line is passed as last argument to the second
  command. The new command flag B_KDEBUG_PIPE_FINAL_RERUN causes the
  second command to be invoked again (with NULL argument) after the
  first command is done.
* Added kprintf_unfiltered() and kputs_unfiltered() which bypass the
  pipe mechanism and directly print to the bluescreen/serial output.
* Moved most commands from debug.cpp to the new
  debug_builtin_commands.cpp.
* B_KDEBUG_DONT_PARSE_ARGUMENTS commands don't get an argument anymore,
  if it would consist of white space only.
* Added new debugger command return value B_KDEBUG_ERROR, which
  indicates that executing the command failed. This return code will
  abort a complete pipe.
* Since debugger commands can nest (i.e. one command can invoke another
  one) the setjmp()/longjmp() mechanism to restore the stack after a
  page fault in a command needs more than one jump buffer.
* Added abort_debugger_command(), which longjmp()s out of the currently
  executed command. This will also abort the current pipe.
* When pagination is enabled pressing "a" will abort the running command
  (as opposed to "q" which only disables the blue screen output, but
  lets the command continue).
* Added debugger commands:
  - "grep" which can be used to filter output by pattern. Removed the
    "filter" command and the underlying mechanism that did that before.
  - "head" which prints only the first lines of output of another
    command.
  - "wc" counts lines, words, and characters of another command's
    output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25744 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-06-01 02:25:00 +00:00
Michael Lotz
9a18e1d269 * Do not delete the device handed over to the devfs when deleting the vnode
as it seems devfs should not take over ownership. The device is deleted
  in republish_driver for legacy drivers before the call to devfs_unpublish_device
  that in turn deletes the vnode. This looks generally suspicious to me as
  the device pointer the devfs vnode may still use gets invalid for a certain
  amount of time (until the node is unpublished). So maybe the devfs should
  take ownership of the device afterall and it shouldn't be deleted by the
  device_manager/legacy driver functions. Axel please review.
* Do not try to delete the IOScheduler for now as creating one is disabled
  currently too.

This fixes the crash on rescans of legacy drivers as seen when unplugging
USB devices.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25729 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-30 20:30:07 +00:00
Michael Lotz
3cec30848c Fix build with TRACE_VFS enabled and also fix a warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25726 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-30 19:06:30 +00:00
Michael Lotz
2ec83efbb2 Fix one reason for crashing on legacy driver rescans, but there seems to be
more to it.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25724 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-30 17:45:27 +00:00
Ingo Weinhold
e4d2f9ba4f Removed the condition that only caches with a source can be merged.
Instead we only allow temporary caches to be merged. This remedies the
problem that after fork() + join() there remains a superfluous cache
layer for all RAM areas.
I haven't tested it, but this might improve the jam situation
memory-wise (huge heap is committed one less time), though it might
worsen it performance-wise (lots of heap pages are moved with every
merge).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25717 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-30 01:02:29 +00:00
Ingo Weinhold
ad66253c1a * Broke the cache merging code out of vm_cache_remove_consumer() into
new function merge_cache_with_only_consumer(), which is also used in
  vm_cache_remove_area(), now.
* Added tracing for the merge case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25716 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-30 00:27:02 +00:00
Ingo Weinhold
0a871009db Added VM cache kernel tracing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25715 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-29 22:09:51 +00:00
Ingo Weinhold
91312c915d Changed tracing output prefix from "cache" to "block cache".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25714 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-29 21:21:33 +00:00
Axel Dörfler
abc690633a * AHCI and other SATA drivers aren't in busses/sata, but either busses/scsi
or busses/ide.
* This change makes the AHCI driver working again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25705 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-29 15:03:15 +00:00
Ingo Weinhold
9101535322 Added new kernel thread "undertaker" which gets rid of dead thread
remains. This replaces the previous mechanism of switching the thread to
a dedicated death stack. We might consider moving more cleanup work to
the undertaker, but that seems a little more involved.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25704 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-29 14:28:31 +00:00
Ingo Weinhold
2b07b8e0f1 * Replaced all instances of benaphores in the kernel code by mutexes.
* Removed kernel benaphores.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25690 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-29 02:08:23 +00:00
Ingo Weinhold
1c18a5df87 Replaced R/W lock implementation. Should have a little less overhead
than a semaphore, and can already be used in the early boot process.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-29 00:32:06 +00:00
Ingo Weinhold
b0f5179aa5 * Changed recursive_lock to use a mutex instead of a semaphore.
* Adjusted code using recursive locks respectively. The initialization
  cannot fail anymore, and it is possible to use recursive locks in the
  early boot process (even uninitialized, if in BSS), which simplifies
  things a little.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-28 23:12:36 +00:00
Ingo Weinhold
d46a010c43 Patch by Vasilis Kaoutsis: Added sigpause().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25682 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-28 15:28:49 +00:00
Axel Dörfler
3023ab11f7 Patch by Jan Klötzke:
* Improve vm86 mode tracing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25681 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-28 12:44:56 +00:00
Axel Dörfler
9f16184577 Patch by Jan Klötzke with minor changes by myself:
* Use vm86 mode to call the VESA BIOS to do the actual mode switching by
  providing an ioctl in the vesa driver.
* Fix vm86.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25680 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-28 10:48:01 +00:00
Axel Dörfler
2c8b410ad5 Patch by Jan Klötzke:
* Current linking scheme does not always export arch specific symbols from the
  kernel. Merging all compiled arch stuff into a single .o file (and linking
  that to the kernel) fixes it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25679 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-28 10:08:07 +00:00
Ingo Weinhold
0e82c8d555 Improved the "caches" command:
* List the sum of pages used by a cache tree in the line printed for the
  root cache.
* Also print the amount of committed memory per cache (and the sum for
  the tree), and allow sorting the list by it ("-c" switch).
* Added usage text.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25675 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-27 23:23:01 +00:00
Axel Dörfler
2976912a51 * BaseDevice didn't initialize the fInitialized member, and thus causing bug
#2265.
* Device::InitDevice()/UninitDevice() are called from outside of the device
  manager, so they better lock it.
* Turned off debug output in devfs and the device manager.
* Fixed debug output in devfs to print the actual vnode/cookie values, instead
  of the structures the VFS passes in now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25670 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-27 12:04:09 +00:00
Axel Dörfler
4584521e0b * PCI_mass_storage_other no longer scans the non-existing busses/disk path, but
all busses now. This should help with broken controllers that don't advertize
  their capabilities correctly.
* Maybe we want to have a list that translates some types for certain devices,
  too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25667 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-26 21:03:32 +00:00
Maurice Kalinowski
ac1d597e94 gcc4 build fix. Don't have default value for declaration+definition. Build is still broken...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25666 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-26 20:49:22 +00:00
Axel Dörfler
34d976b499 Forgot to remove now unused files.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25664 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-26 18:07:04 +00:00
Axel Dörfler
368167ede8 * Integration of the new driver architecture.
* Moved devfs from fs/ to device_manager/, and separated the legacy driver
  support from it.
* Removed fast_log module.
* There are a couple of (temporary) regressions, though:
  - legacy SATA and ISA IDE support is disabled, the drivers haven't been
    ported yet.
  - The not yet used ATA bus manager hasn't been ported yet, either.
  - AHCI changes have not been tested.
  - the listdev command has been removed from the build (as it currently
    doesn't work anymore).
  - device manager generated IDs currently are not freed anymore when a device
    node is removed.
  - generic drivers can't yet use the new driver architecture.
  - simple busses that do not support device types won't work yet.
  - legacy driver publishing/unpublishing (ie. what USB needs) has not been
    tested, and may be broken.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-26 16:52:27 +00:00
Axel Dörfler
113a13d83e Print actual floating point number, instead of integer fraction.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-26 16:13:19 +00:00
Axel Dörfler
1e18692e12 * get_vnode() now accepts a NULL parameter for the fsNode argument.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25660 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-26 11:32:27 +00:00
Ingo Weinhold
61de73e29c Memory leak in error cases. CID 729.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25659 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-25 23:41:22 +00:00
Ingo Weinhold
5839058aa9 Memory leak in error cases. CID 737.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25646 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-24 16:29:53 +00:00
Ingo Weinhold
a1e3759f69 Memory leak in error cases. CID 808.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25644 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-24 16:17:56 +00:00
Ingo Weinhold
cefcb7b41c Memory leak in error case. CID 872.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25643 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-24 16:07:29 +00:00
Ingo Weinhold
7ad3cf0bc3 Memory leak in error case. CID 873.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-24 16:04:57 +00:00
Ingo Weinhold
1462a0827b Reordered the functions (private -> public). No functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25637 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-24 15:27:31 +00:00
Ingo Weinhold
6607b17d6b Pimped up the "caches" command. Now it prints the caches in trees with
additional info (offset, size, used pages, areas), sorting the trees
by used pages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25633 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-24 00:48:15 +00:00
Ingo Weinhold
5e3a974d1e * When KERNEL_HEAP_LEAK_CHECK is enabled we also store the calling
function requesting the allocation.
* The "allocations" commands does also print the caller and can filter
  by caller, now.
* Added new "allocations_per_caller" command, which sums up allocations
  per caller and prints them in a table sorted by size or count.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25632 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-23 22:30:20 +00:00
Ingo Weinhold
fe8878faa4 Implemented unmapping of partial areas (mmap()/munmap()). Review
welcome.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25629 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-23 14:00:15 +00:00
Axel Dörfler
a411c76cd6 * Added pthread_attr_setscope(), and pthread_attr_getscope(). We only support
PTHREAD_SCOPE_SYSTEM which makes the implementation rather simple.
* This closed ticket #2242.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25628 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-23 11:24:40 +00:00
François Revol
74be35c78b Some more funny sysconf()...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25627 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-23 01:38:05 +00:00
François Revol
3a17a548da - factored out [f]pathconf().
- *pathconf() now uses statvfs and fs_info data when appropriate. It should also check for file type though, some only apply to directory or others.
- added confstr(_CS_PATH) with a sensible default.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25625 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-23 00:33:08 +00:00
François Revol
15ebab7616 *pathconf() need to call statvfs() to be more correct, but the kernel doesn't have it. Remove conf.c for now, it's likely not needed anyway.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-23 00:11:07 +00:00
François Revol
ca974ded95 Some more [f]pathconf() names, not yet handled. filesizebits returns 64 though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 23:22:26 +00:00
François Revol
4f20b083aa Error in *conf() must set errno.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25622 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 23:04:11 +00:00
Ingo Weinhold
0f448d21e5 * Added vm_page_write_modified_page_range(), which is similar to
vm_page_write_modified_pages(), save that it only writes pages in the
  given range.
* Added vm_page_schedule_write_page_range() which schedules all modified
  pages in the given cache's range for writing by the page writer.
* Added _kern_sync_memory() syscall and the msync() POSIX function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25620 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 21:51:12 +00:00
Axel Dörfler
403bfdda6c * The floating point output now correctly honours eventual sign flags,
and actually shows the sign (before, it would just absorb it).
* On calling floating() from vsnprintf(), the order of the "fieldWidth", and
  "flags" parameters were mixed, causing some strange output.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25611 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 15:38:09 +00:00
Axel Dörfler
15173df4e9 Last patch of the vm86 patch series from Jan Klötzke - thanks!:
* The new function vm86_do_int(struct vm86_state *state, uint8 vec) provides a
  facility to call BIOS interupt handlers. The function must only be called from
  a user thread context because the lower 1MB of the address space is used.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25610 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 13:54:28 +00:00
Axel Dörfler
7da0a81c0e Patch by Jan Klötzke (with additional TODO comments):
* Add a "fault_callback" to the thread structure which is called when a
  unhandled page fault happens in user space. A SIGSEGV will only be sent
  if the callback returns "true".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25609 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 12:33:30 +00:00
Axel Dörfler
ec09e0a89d Patch by Jan Klötzke:
* For vm86 mode the kernel stack top is adjusted -> do not rely on the
  kernel_stack_base + KERNEL_STACK_SIZE calculation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25608 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 12:02:30 +00:00
Axel Dörfler
bb107c4e29 Patch by Jan Klötzke:
* In vm86 mode CS will have arbitrary values so we check for both USER_CODE_SEG
  and the VM flag in EFLAGS. This is also done when entering interrupt gates.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 11:59:47 +00:00
Axel Dörfler
a71e7c8d43 Patch by Jan Klötzke:
* The IO permission bitmap is always checked for virtual 8086 mode tasks.
  Make sure it is invalid.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25605 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 11:44:42 +00:00
Axel Dörfler
b8caf749bf * _user_cpu_enabled() accidently returned an error code instead of "false".
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25604 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 11:38:00 +00:00
Axel Dörfler
44431460dd Daemons are now spawned with "new", and thus they should be sent back using
"delete", not free().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25603 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-22 11:37:20 +00:00
Ingo Weinhold
d129070196 Release the fork lock when _kern_fork() failed or otherwise we'll
deadlock when trying the next fork().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25600 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-21 23:13:27 +00:00
Jérôme Duval
d68d2bb1da fix ppc boot build
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-21 20:48:58 +00:00
Jérôme Duval
269dbbdc5c fix ppc libroot build
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25590 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-21 20:45:09 +00:00
Ingo Weinhold
3021393e36 Let's pretend we support POSIX threads.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25588 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-21 00:03:09 +00:00
François Revol
867bc16149 It should be eieio...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25586 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-20 21:49:25 +00:00
Ingo Weinhold
a8af2b6dda Some work on pthreads:
* Made the pthread_cond_t internals public. This is necessary to support
  process shared condition variables. Fixed initializer macro.
* Made the pthread_rwlockattr_t structure opaque.
* pthread_t is no longer typedef'ed to int. It's the pointer to the
  internal _pthread_thread structure.
* Removed __get_pthread(). pthread_self() can be used instead.
* No longer tunnel the pthread exit value through Haiku's thread exit
  value. We do have a separate field in the _pthread_thread structure
  for it, now.
* Handle detaching of threads correctly.
* pthread_rwlockattr_{g,s}etpshared() use the
  PTHREAD_PROCESS_{SHARED,PRIVATE} constants, now.
* Commented out yet unsupported structures (barriers, spinlocks).
* Rebuilt APR optional package. The pthread changes weren't binary
  compatible.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25582 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-20 20:43:28 +00:00
Ingo Weinhold
0a89fae916 wait_for_child() does now wait for the main thread of a dead child to be
gone. Fixes bug #1639.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25568 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-19 23:21:58 +00:00
Ingo Weinhold
89d327d66e Added missing spwd::sp_lstchg field.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25560 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-19 02:16:12 +00:00
Ingo Weinhold
1fab7b919f Add a newline to the syslog message, if it was missing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25556 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-18 23:06:30 +00:00
Ingo Weinhold
61b37794a4 Added explicit support for loading executables compiled with the
respectively other gcc version on a Haiku compiled with gcc 2 or gcc 4.
The libraries for such an executable are first searched in "gcc4"
respectively "gcc2" subdirectories of the standard search path
directories. If not found there, we try again with the standard paths.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-17 23:25:17 +00:00
Ingo Weinhold
b3d6c12dbf * Fixed kernel tracing for gcc 4. The ABI changed in a way that isn't
compatible with what our code assumed (pointers to objects of
  TraceEntry and its POD base class trace_entry aren't identical
  anymore).
* Added optional stack traces for ktrace_printf() output in the kernel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25531 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-17 18:59:19 +00:00
Ingo Weinhold
fbe0c27a94 axeld + bonefish:
Changed condition variables so that it is allowed to block (e.g. lock
mutexes etc.) between Add() and Wait(). This fixes #2059, since the
block writer used them this way and could thusly fail to wait for a
condition variable, causing a temporary stack object to be used past its
lifetime.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25525 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-17 10:21:37 +00:00
Stephan Aßmus
9aa2788e97 Another patch by Vasilis Kaoutsis:
* Use find_directory() for the hash for preloaded modules. I am not sure this
  patch is needed, since it only concerns the hash. Please review.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25511 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-15 12:28:08 +00:00
Stephan Aßmus
7c61d84fcd Patch by Vasilis Kaoutsis:
* Renamed main.c to main.cpp
* Use find_directory() to construct the Bootscript path.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25509 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-15 12:10:12 +00:00
Stephan Aßmus
ea26d9f0c2 Honour 80 char/line limit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25508 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-15 12:09:12 +00:00
Stephan Aßmus
5dc81824d6 Another patch by Vasilis Kaoutsis:
Use find_directory() to find the runtime_loader when starting teams.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25506 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-15 11:55:09 +00:00
Stephan Aßmus
2764548ef3 Use find_directory() in the devfs. Based on patch by Vasilis Kaoutsis.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25503 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-15 10:06:58 +00:00
Ingo Weinhold
6b202f4e3d * Introduced new header directory headers/private/system which is supposed
to contain headers shared by kernel and userland (mainly libroot).
* Moved quite a few private kernel headers to the new location. Split
  several kernel headers into a shared part and one that is still kernel
  private. Adjusted all affected Jamfiles and source in the standard x86
  build accordingly. The build for other architectures and for test code
  may be broken.
* Quite a bit of userland code still includes private kernel headers.
  Mostly those are <util/*> headers. The ones that aren't strictly
  kernel-only should be moved to some other place (maybe
  headers/private/shared/util).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-14 03:55:16 +00:00
Ingo Weinhold
541532342d Fixed build with tracing turned on.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-13 20:04:11 +00:00
Ingo Weinhold
3ca1072d44 * Reimplemented pthread_once. The old one was neither thread-safe nor
particularly efficient.
* pthread_mutex implementation:
  - Removed the pthread_mutex_t indirection (the type was a pointer to
    the actual structure which was allocated on the heap), as it made
    sharing the mutex between processes impossible.
  - Removed the distinction between process shared and non-shared
    mutexes. Benaphores work just as well in shared memory, so we always
    use them.
* Fixed some static initializer macros. PTHREAD_COND_INITIALIZER is
  still broken, since it doesn't work in C code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25481 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-13 01:50:54 +00:00
François Revol
f5c558edc1 The wonders of C++ in the kernel... you get C++ linkage by default :^)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25480 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 22:01:12 +00:00
Ingo Weinhold
b4e5605e0a * unsetenv() was moving too much memory, thus corrupting the data after
its allocation.
* Added TODO to use a benaphore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25478 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 20:48:03 +00:00
Ingo Weinhold
7c3137b98b * reader_count was not incremented when a waiting reader was woken up.
* Added comment clarifying the use of reader_count and writer_count.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25474 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 17:22:16 +00:00
Ingo Weinhold
370602bff6 Added pthread rwlock support.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25470 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 13:56:11 +00:00
Ingo Weinhold
b5e3c0a1ea Added new syscalls _kern_block_thread()/_kern_unblock_thread[s]().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25469 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 13:53:56 +00:00
Jérôme Duval
036cf4dd20 block_cache_delete(): only lock the cache mutex and avoid MutexLocker. the mutex is destroyed in the destructor.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25467 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 12:56:59 +00:00
Jérôme Duval
c1d860fb1f block_cache_delete(): unlock the cache mutex before deleting the cache
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25463 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-12 10:54:14 +00:00
Ingo Weinhold
dd6eebabfe Use the [un]defer_signals() functions to prevent signal delivery while
being in the allocator. Fixed bug #1965.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25452 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-11 16:30:22 +00:00
Ingo Weinhold
d648afb8d7 * For each userland team the kernel creates an area in the userland
address space that is fully locked and marked B_KERNEL_AREA. It can
  thus be accessed by the kernel without additional checks.
* For each userland thread we do create a user_thread structure in that
  area. The structure is accessible from userland via TLS, using the
  private get_user_thread() function.
* Introduced private userland functions [un]defer_signals(). They can be
  used to cheaply disable/re-enable signal delivery. They use the
  user_thread::defer_signals/pending_signals fields which are
  checked/updated by the kernel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25451 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-11 16:25:35 +00:00
Ingo Weinhold
58148e2e02 Added new private area protection flag B_KERNEL_AREA, which prevents all
changes to the area (delete, resize, clone) from userland.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25450 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-11 16:02:13 +00:00
Ingo Weinhold
3560b757c2 Fixed warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25438 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 22:22:08 +00:00
Ingo Weinhold
5d0638bf88 Changed FATAL macro to always dprintf() the error. Additionally it still
prints to stdout, but only until the program and its dependencies are
loaded. Failed attempts to load add-ons and the like doesn't pollute
stdout anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25437 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 22:21:52 +00:00
Ingo Weinhold
a636a33926 Use the new B_ABSOLUTE_REAL_TIME_TIMEOUT. Fixes pthread_cond_timedwait()
and pthread_mutex_timedlock() which were waiting system time relative
although their timeout parameter is Epoch relative.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25435 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 21:44:03 +00:00
Ingo Weinhold
4d3680aaef Added timeout constant B_ABSOLUTE_REAL_TIME_TIMEOUT which specifies a
timeout relative to the Epoch.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25434 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 21:34:51 +00:00
Ingo Weinhold
899aa8e1f6 Moved setjmp() to sigsetjmp.S for ppc and m68k, too. Should fix the
kernel build. Haven't tested it though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25431 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 18:10:15 +00:00
Ingo Weinhold
eb1a8c446e siglongjmp() calls __longjmp_return() also on x86, now. This resets the
signal mask as required. and also makes my recent return value fix
unnecessary, since __longjmp_return() already does that.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25430 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 18:05:41 +00:00
Ingo Weinhold
8bba1c2637 Forgot to check this one in. setjmp.S is no more.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25429 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 17:39:29 +00:00
Ingo Weinhold
ad7ff929dd Reimplemented setjmp(). It no longer offsets the caller's esp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25428 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 17:16:09 +00:00
Ingo Weinhold
c306892e40 Fixed my fix. It would always return 1 now.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25427 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 17:10:15 +00:00
Ingo Weinhold
378a1cbb0c Added poll() kernel tracing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25425 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 16:23:48 +00:00
Axel Dörfler
1da9f5cea5 * Added BDiskSystem::ShortName() and everything needed to get it there.
* Added BDiskDeviceRoster::GetDiskSystem() method, that can get a disk system
  by short/pretty/module name - since they should all be unique, I put them
  in a single namespace, please complain if you don't like that :-)
* Cleaned up DiskSystem.h and DiskDeviceRoster.h according to the updated
  header guidelines.
* Renamed ntfs pretty name from "ntfs File System" to "Windows NT File System".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25414 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 11:44:00 +00:00
Ingo Weinhold
c44fb2a62c Advisory locking fixes:
* Made the access strategy to vnode::advisory_locking consistent.
  get_advisory_locking() was guarding it with sVnodeMutex,
  create_advisory_locking() was using atomic_pointer_test_and_set(), and
  release_advisory_lock() just set it unguardedly. We do use sVnodeMutex
  consequently, now.
* Beautified create_advisory_locking() (got rid of the gotos,
  reorganized the control flow).
* Fixed race conditions in acquire_advisory_lock(). It was always
  unlocking and relocking the advisory_locking object when it didn't
  have to wait, but in the meantime someone else could have changed the
  locking situation. Reorganized the control flow, so that it only drops
  the lock when it has to fail or wait. Using create_advisory_locking()
  upfront simplifies the code quite a bit (and fixes another race
  condition).

APR's testprocmutex test seems happy now, at least.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-10 00:53:13 +00:00
Ingo Weinhold
d59239b300 Also align the given size to pages when unmapping memory. Fixes munmap()
for non-aligned sizes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25399 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-09 18:23:23 +00:00
Ingo Weinhold
e4d9ef0e7c setjmp() must return 1 when a 0 value has been passed to longjmp().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25398 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-09 18:22:01 +00:00
Stephan Aßmus
370fc8c907 Fix the build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25397 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-09 15:56:37 +00:00
Ingo Weinhold
ec5867990b I broke pthreads in r25390. The thread pointer was passed in the wrong
argument.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25396 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-09 15:05:17 +00:00
Ingo Weinhold
f7cc12b389 Implemented pthread_attr_{g,s}etstacksize(). Also added commented-out
prototypes for the missing pthread_attr_*() functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25390 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-09 01:36:49 +00:00
Ingo Weinhold
4c49f2056b * Changed _kern_spawn_thread() and create_thread(): Instead of individual
arguments they get a single thread_creation_attributes structure now.
* Added stack_address and stack_size to thread_creation_attributes,
  which allow to specify the stack size or the stack to be used for the
  new user thread.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25389 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-09 01:32:36 +00:00
Axel Dörfler
56bbbbc9ca * Added Adopt() method that steals the other path's buffer.
* Fixed operator=(): the second argument of SetTo() is a boolean (normalize),
  not the length of the buffer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 16:45:29 +00:00
Axel Dörfler
9623534399 Now uses mutexes instead of benaphores, that also simplified object
instantiation at early boot a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25380 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 16:06:51 +00:00
Axel Dörfler
06b580d76f Replaced the sAvailableMemoryLock benaphore with a mutex.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25379 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 15:57:59 +00:00
Axel Dörfler
adf376c941 Replaced benaphores with mutexes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25378 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 15:52:27 +00:00
Axel Dörfler
23a60f423e Reordered includes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25376 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 15:08:30 +00:00
Axel Dörfler
02a3b9ef49 * kernel_daemon is now a C++ file, and uses DoublyLinkedList instead of
the C list mechanism which also makes the code nicer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25375 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 15:08:14 +00:00
Ingo Weinhold
f23d0a6242 Implement shm_open() and shm_unlink(). The shared memory objects are
simply created as files in /boot/var/shared_memory/. The Bootscript
clears the directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25374 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 13:42:33 +00:00
Ingo Weinhold
3dfe682f55 * Added some padding to the sem_t structure.
* Changed the semantics of unnamed semaphores. Before parent and child
  of a fork() would always share an earlier created semaphore. Now we do
  that only, if the "shared" parameter of sem_init() was true. That's
  still not quite the behavior Linux and Solaris have, but should be
  perfectly fine with how reasonable code would use the API.
* There's a global table for shared unnamed semaphores now. ATM a
  semaphore is leaked when no one explicitly destroys it (just as with
  named sems).
* Enforce per-team and global semaphore number limits.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25362 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 01:39:49 +00:00
Ingo Weinhold
01b1098795 * Fixed some misunderstanding regarding the _POSIX_* macros. They are
not supposed to be passed to pathconf() or sysconf().
* Added POSIX semaphore related macros.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25361 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 01:27:31 +00:00
Axel Dörfler
7cbf8fdd5a First part of the vm86 work by Jan Klötzke:
* Allow userland teams to create areas below 1 MB when requested specifically.
* Note, this is a temporary solution - see the comments in the code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25358 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-07 21:21:43 +00:00
Ingo Weinhold
c00931f204 * Don't try to strdup() the name given for an unnamed semaphore.
* When initializing an unnamed semaphore failed, it would be deleted
  twice.
* The user structure pointer wasn't correctly passed when initializing
  named semaphores.
* When opening a named semaphore failed after it has already been
  published, it is now unlinked again.
* The timeout passed to sem_timedwait() is relative to the Epoch. We
  need to offset to system time.
* Added TODO regarding a per team semaphore limit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25345 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-07 12:10:38 +00:00
Ingo Weinhold
e8f1b18ec2 Clear O_EXCL, if O_CREAT is not given.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25343 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-07 12:03:25 +00:00
Stefano Ceccherini
5fce1ce7c0 The second parameter of KPath::SetTo() is a bool, not a size_t. Reported
by Marc Flerackers. Thanks!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25338 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-07 09:07:37 +00:00
Ingo Weinhold
98e6713172 * Moved realtime_sem.{cpp,h} into new posix subdirectory.
* Renamed the old kernel_posix[_arch...].o to kernel_lib_posix...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25336 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-06 23:16:04 +00:00
Jérôme Duval
7c8ddc9795 added B_SAFEMODE_DISABLE_APM
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25334 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-06 22:04:25 +00:00
Ingo Weinhold
5142c2ac86 Added support for POSIX semaphores (the ones from the XSI extension
Realtime option group). The implementation should be complete, but is
totally untested yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25326 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-06 03:39:36 +00:00
Ingo Weinhold
cb734beeee Added get_open_fd() function which gets the descriptor and also
increments its open count.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25317 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-05 00:24:14 +00:00
Marcus Overhagen
ca978b6ed8 make memory map printing independant of other mmu debug output
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25306 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-04 01:20:22 +00:00
Ingo Weinhold
3134e71811 Also check whether the data pointers of provided userland iovecs are
actually pointing to userland. This saves checks in the net stack.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25298 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-03 01:04:20 +00:00
Axel Dörfler
248f01553f * Fixed warning and bad coding style.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25290 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-02 13:00:27 +00:00
Axel Dörfler
2239c25b29 Fixed warnings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25289 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-02 12:39:17 +00:00
Ingo Weinhold
6f57d9d066 When creating a socket file descriptor fetch the SO_NONBLOCK value from
the socket first, so the FD open flags are in sync with that. Fixes
situations where a socket accept()ed from a non-blocking listener socket
wouldn't have O_NONBLOCK set.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25288 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-02 02:30:16 +00:00
Ingo Weinhold
0c615a01ae * Removed old mutex implementation and renamed cutex to mutex.
* Trivial adjustments of code using mutexes. Mostly removing the
  mutex_init() return value check.
* Added mutex_lock_threads_locked(), which is called with the threads
  spinlock being held. The spinlock is released while waiting, of
  course. This function is useful in cases where the existence of the
  mutex object is ensured by holding the threads spinlock.
* Changed the two instances in the VFS code where an IO context of
  another team needs to be locked to use mutex_lock_threads_locked().
  Before it required a semaphore-based mutex implementation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25283 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-01 22:07:36 +00:00
Ingo Weinhold
9e518ee91d Also hold the threads lock when removing a team from the team hash
table. This is not necessary, but allows for a better solution fo how to
lock the IO context of another team.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25281 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-01 21:53:12 +00:00
Ingo Weinhold
ee96aa8f6e * Replaced cutex::release_count by flags field. It is only one thread
that can unlock the mutex, so one bit is sufficient.
* Added cutex_init_etc() which has an additional "flags" parameter.
  The only specifyable flag is CUTEX_FLAG_CLONE_NAME, which causes the
  function to strdup() the given name and free() its copy in
  cutex_destroy().
* cutex_destroy() does now unblock waiting threads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25280 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-01 18:06:09 +00:00
Ingo Weinhold
184de764fe Replaced the vm_cache mutex by a cutex. This should save quite a few
semaphores.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25277 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-01 01:59:09 +00:00
Ingo Weinhold
8562499f44 * Introduced a new locking primitive I called "cutex" (sorry for the
name, couldn't resist :-P). It's semantically equivalent to a mutex,
  but doesn't need a semaphore (it uses thread blocking and a simple
  queue instead). Initialization can't fail. In fact it is ready to use
  without initialization when living in the bss segment, also in the
  early boot process. It's as fast as a benaphore in cases of low lock
  contention, and faster otherwise.  Only disadvantage is the higher
  immediate memory footprint of 16 bytes.
* Changed how the "thread" and "threads" debugger commands list the
  objects they are waiting for. Cutexes are also included.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25276 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-01 01:53:07 +00:00
Ingo Weinhold
514fb1360b * Removed select_sync::lock. The only thread that was still locking was
the selecting thread, which has obviously no effect.
* Changed select_info::events to vint32. It is now updated atomically.
  This removes a race condition when concurrent threads would notify at
  the same time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25273 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-30 16:12:20 +00:00
Ingo Weinhold
503912f733 Fixed the case that a file to be created non-exclusively is a symlink
(bug #2183).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25271 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-30 14:21:02 +00:00
Ingo Weinhold
2428097297 Removed superfluous uint32 ref parameter from select() FS hook.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25268 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-30 00:06:17 +00:00
Ingo Weinhold
9981c81f8b Fixed a race condition between select_fd() and close(). Since
select_fd() first added the select info to the IO context and then
called select() on the descriptor, a close() called at the same time
could already deselect the events and close the descriptor before
select_fd() was done with select(). select_fd() does now keep an own
open reference while selecting the events and add the select info
afterwards to the IO context (if the FD is still current).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25266 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 23:54:35 +00:00
Axel Dörfler
b1d749f8f1 * Added an atomic.h header that provides a C++ file with a templatized
64-bit safe version of atomic_test_and_set() for pointers:
  atomic_pointer_test_and_set().
* The VFS is now using this function (it's not used anywhere else in the
  kernel this way).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25260 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 21:05:05 +00:00
Axel Dörfler
c16d05cff9 * steal_page() called remove_page_from_queue() without holding the sPageLock.
This fixes bug #1900 for real.
* Rearranged find_page_candidate() a bit, removed duplicate code, added a panic
  in case the marker state is invalid.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25255 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 19:45:13 +00:00
Axel Dörfler
bbc25eb650 * Renamed temporary KDL variable from _cookie to _volume in the "mount"
command.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25251 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 16:49:14 +00:00
Axel Dörfler
0b51ee4efd * The page writer was calling remove_page_marker() without holding the
sPageLock. This could easily mess up the page queue.
* Now, remove_page_marker() gets the lock itself. This fixes bug #1900.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25250 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 16:48:27 +00:00
Axel Dörfler
76824051fd * Only enable block/transaction tracing when the macro is 1.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25247 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 14:57:56 +00:00
Ingo Weinhold
a1587d16d5 Ctrl-L clears the KDL screen.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25233 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-29 01:24:41 +00:00
Jérôme Duval
873f6659eb reverted r25227. Thanks for the hint Ingo :)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25228 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-28 19:01:00 +00:00
Jérôme Duval
615ffc60cc build fix (with no tracing conf)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25227 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-28 18:34:16 +00:00
Ingo Weinhold
97c0a2b3f1 * Paranoia checks were accidentally globally enabled by default. Object
* cache paranoia was always enabled.
* Changed from paranoia on/off to levels. Adjusted the macros to take a
  level argument.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25215 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 15:13:31 +00:00
Axel Dörfler
2651d14422 Build fix; SYSCALL_TRACING is now always defined.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25214 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 15:10:34 +00:00
Ingo Weinhold
6bf15ffcdc * Changed macros that enable tracing for individual components from
defined/undefined to numeric values (0 for undefined). This allows for
  trace levels.
* Set SYSCALL_TRACING_IGNORE_KTRACE_OUTPUT default to 1, since this is
  what one usually wants.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25213 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 14:24:18 +00:00
Ingo Weinhold
b2d95c3c1d * Reverted r25209. We need the symbol even with tracing disabled, since
modules could use it. Moved the tracing_stack_trace definition out of
  the conditional section instead.
* Made the TraceOutput::Print()/PrintStackTrace() method no-ops when
  tracing is disabled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25211 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 14:00:37 +00:00
Rene Gollent
fe2edb706d This function needs to be conditional on ENABLE_TRACING also, otherwise the build breaks.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25209 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 06:18:55 +00:00
Ingo Weinhold
2be0b7cc43 Added paranoia checks. They reveal that a net buffer data node is freed
twice when running the OpenSSH "forwarding" test, which corrupts the
slab's object list. It's not quite clear to me yet why that happens.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25208 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 03:22:26 +00:00
Ingo Weinhold
2b8ae28a15 * Added kernel tracing. Even with optional stack traces.
* Added "mode" parameter to set_paranoia_check(), which specifies
  whether the check is supposed to already exist/not exist yet. This
  allows for, as it turns out, very useful additional tests. Added
  {ADD,UPDATE}_PARANOIA_CHECK macros that imply the used "mode"
  parameter.
* PARANOIA_SLOT_COUNT was accidentally redefined in the source file.
* Fixed remove_paranoia_check(). It didn't remove anything.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25207 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 03:14:36 +00:00
Ingo Weinhold
65f4015279 Support for stack traces in tracing entries:
* Added capture_tracing_stack_trace() which allocates space in the
  tracing buffer and captures the stack trace according to the given
  parameters.
* Added TraceOutput::PrintStackTrace() to print a stack trace thus
  created.
* Added TraceEntry::DumpStackTrace() callback which is supposed to print
  a stack trace for the entry, if it can do that.
* Added "--stacktrace" switch to the "traced" command, which causes the
  stack traces for all entries that have one to be printed as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25205 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 03:02:01 +00:00
Ingo Weinhold
4dd0a2c7b6 Added arch_debug_get_stack_trace() that can be used to get a stack trace
(the list of return addresses) for the current stack.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25204 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-27 02:54:27 +00:00
Ingo Weinhold
7526aa66f4 Removed some leftover junk.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25197 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-26 20:50:03 +00:00
Ingo Weinhold
67411c9d36 Added object cache kernel tracing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25196 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-26 20:32:41 +00:00
Ingo Weinhold
0efc7a1ed7 Temporarily added the /boot/home/config/* paths to the executable,
library, and add-on search paths. Can be removed again, when certain
optional packages have been moved to /boot/common.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25194 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-26 20:28:20 +00:00
Ingo Weinhold
dfa611bb04 Added paranoia checks debug facility. It helps checking that data in
memory haven't changed behind one's back.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25193 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-26 20:25:02 +00:00
François Revol
807cf76df0 memory barrier functions available for drivers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25183 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-26 15:18:04 +00:00
Axel Dörfler
f8a2f7ce58 * attribute dirs shouldn't be locked out either; I've inverted the type check,
so that it now only checks for the type that allow locking.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25168 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-25 22:44:03 +00:00
Ingo Weinhold
3152304e53 Moved creation of the kernel tracing entry for exec_team() to a later
point where the argument vector has already been copied to the kernel.
Before it was crashing when the syscall provided a bad address.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25167 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-25 21:42:04 +00:00
Bruno G. Albuquerque
d81dcabe8e FS gurus, please review.
- get_new_fd() now checks if we are dealing with attributes before deciding to
  bail out on a locked vnode.
- Enabled locking in MailSettings again as it now works.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25162 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-25 19:45:40 +00:00
François Revol
e65c298c0e Add memrchr for ppc and m68k too. Please don't forget other archs when adding stuff :P
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25156 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-25 12:22:11 +00:00
Ingo Weinhold
210199c5a7 * Resolved {g,s}etrlimit() TODO's, i.e. moved the implementation into
separate functions and made the set errno correctly.
* Added RLIMIT_CORE case. We don't support core dumps, but setting them
  to disabled shouldn't fail anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25141 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-25 01:08:07 +00:00
Ingo Weinhold
0951fcb4a3 vfs_create_special_node() always tried to create the node in "/".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25139 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-25 01:02:12 +00:00
Ingo Weinhold
fb913b19be Added POSIX functions posix_openpt(), grantpt(), ptsname(), and
unlockpt(), which provide a portable way of opening a pty.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25134 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-24 21:29:13 +00:00
Ingo Weinhold
e225a906d2 With my recent changes release_sem_etc() accidentally lost the
cleverness to reschedule only, if it actually unblocked another thread.
Should have been the reason for #2152 (overall slowdown).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25131 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-24 20:04:43 +00:00
Axel Dörfler
2909d9dc26 * Factored a delete_notification() that is now used in three places.
* remove_transaction_listeners() was checking the events_pending field without
  holding the sNotificatonLock - that should have been harmless (as we're in the
  middle of deleting the transaction), but it now looks better.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25130 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-24 16:23:10 +00:00
Ingo Weinhold
71a49db6b6 Use the thread blocking functions instead of a condition variable for
read request. Can probably be done for writers as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25111 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 21:47:54 +00:00
Ingo Weinhold
023bf5fcda * Added support for timeouts.
* Added support for non-published condition variables. One has to call
  Init() on those, and add entries directly with the
  ConditionVariable::Add() method.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25110 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 21:46:23 +00:00
Ingo Weinhold
60222c8bac * Made thread_block_with_timeout_lock() more user-friendly. It allows
passing 0 as timeout flags or B_INFINITE_TIMEOUT as timeout, in which
  case no timer will be used.
* Implemented missing thread_block_with_timeout().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25104 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 19:46:08 +00:00
Ingo Weinhold
c2d96d4500 Added back accidentally removed check for B_THREAD_SUSPENDED when
delivering a kill signal.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25102 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 19:01:23 +00:00
Axel Dörfler
43bae01508 * Made waiting for a timer handler more power usage friendly.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25101 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 18:46:34 +00:00
Ingo Weinhold
6cef245eca * Detemplatized ConditionVariable{Entry}. Merged them with their
respective Private* base class.
* Changed sigwait() and sigsuspend() to use thread_block() instead of a
  condition variable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25100 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 18:32:15 +00:00
Ingo Weinhold
b95f6d4710 * Introduced a set of functions (thread_prepare_to_block(),
thread_block(), thread_unblock(),...) that allow a thread to wait for
  something without needing a semaphore or condition variable. It can
  simply block and another thread can unblock it. Supports timeouts and
  interrupting. Both semaphores and condition variables use this
  common mechanism, now.
* Semaphores:
  - Some simplifications due to the thread blocking mechanism.
  - Changed locking order to sem -> thread. It was the other way around
    before and when introducing the wait_for_objects() support I had
    also introduced a situation where the locking was reverse, which
    could potentially cause a dead lock on SMP systems.
  - Instead of queueing thread structures, a semaphore queues
    queued_thread entries now, which are created on the stack. The
    thread::sem structure could thus be removed.
  - Added sem_entry::net_count, which is sem_entry::count plus the
    acquisition count of all waiting threads. This number is needed in
    remove_thread_from_sem() and instead of computing it there we
    maintain it.
  - Fixed remove_thread_from_sem(). It would not unblock threads, if
    the sem count was <= 0.
  - Made sem::last_acquirer unconditional. It is actually needed for
    sem_info::latest_holder. Fixed fill_sem_info() accordingly.
  - Added some optional tracing output, though only via ktrace_printf().
* Condition variables:
  - Could be simplified significantly through the use of the thread
    blocking mechanism. Removed a good deal of unnecessary code.
  - Moved the ConditionVariableEntry "flags" parameter from Wait() to
    Add(), and adjusted all places where condition variables are used
    accordingly.
* snooze() uses thread_block_with_timeout() instead of a semaphore.
* Simplified thread interrupting in the signal and user debugger code.
  Instead of separate functions for threads waiting on a semaphore or
  condititon variable, we only have a single thread_interrupt(), now.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25099 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-04-22 16:22:42 +00:00
Ingo Weinhold
e01cebeb0a * cancel_timer():
- If the hook of the timer we're cancelling is currently being
    executed, we do now wait till it is finished. This is how the BeBook
    specifies the function to behave.
  - Periodic timers would not be cancelled, if their hook was being
    invoked at the same time, since they weren't in the queue during
    that time.
  - Since we know the CPU on which the timer is scheduled (timer::cpu),
    we don't have to look through any other CPU queue to find it.
  - Fixed the return value. It should report whether the timer had
    already fired, and was not always doing that.
* Added private add_timer() flag B_TIMER_ACQUIRE_THREAD_LOCK. It causes
  the thread spinlock to be acquired before the event hook is called.
  cancel_timer() doesn't wait for timers with the flag set. Instead we
  check in the timer interrupt function after acquiring the thread
  spinlock whether the timer was cancelled in the meantime. Calling
  cancel_timer() with the thread spinlock being held does thus avoid any
  race conditions and won't deadlock, if the event hook needs to acquire
  the thread spinlock, too. This feature proves handy for some kernel
  internal needs.
* The scheduler uses a B_TIMER_ACQUIRE_THREAD_LOCK timer now and
  cancel_timer() instead of the no longer needed
  _local_timer_cancel_event().


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