Commit Graph

3396 Commits

Author SHA1 Message Date
Axel Dörfler
7249de5e61 * Changed the affine scheduler to have more or less the same characteristics
as the BeOS scheduler. This makes MediaPlayer playback much better, as high
  priority threads could lose their quantum to a worker thread twice in a row
  with 4% probability before.
* I did not yet change the simple scheduler as well yet; maybe this isn't the
  final one either.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33965 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-09 19:00:42 +00:00
Axel Dörfler
a0439d88df * Adjusted thread priorities of several system services based on a mail from
Mikhail Panasyuk: since worker threads often end up with B_NORMAL_PRIORITY,
  it might be a good idea to give system threads a higher priority.
* Minor cleanup (mostly automatic whitespace).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33961 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-09 15:25:48 +00:00
Axel Dörfler
6242fd5977 * Added the possibility to debug latency issues with spinlocks.
* When DEBUG_SPINLOCK_LATENCIES is 1, the system will panic if any spinlock is
  held longer than DEBUG_LATENCY micro seconds (currently 200). If your system
  doesn't boot anymore, a new safemode setting can disable the panic.
* Besides some problems during boot when the MTRRs are set up, 200 usecs work
  fine here if all debug output is turned off (the output stuff is definitely
  problematic, though I don't have a good idea on how to improve upon it a lot).
* Renamed the formerly BeOS compatible safemode settings to look better; there
  is no need to be compatible there.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33953 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-08 20:26:48 +00:00
Axel Dörfler
bec53b590f * Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33952 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-08 20:20:27 +00:00
Axel Dörfler
01ce3f26d2 * Cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-08 17:31:39 +00:00
Michael Lotz
8665c30ace That was not such a good destruction order in the error case. As the scheduler
accesses the scheduler data inside the thread structure, freeing it first lead
to a crash when a thread couldn't be created.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33940 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-07 16:33:29 +00:00
Axel Dörfler
bde1f75946 * Cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33937 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-07 10:58:18 +00:00
Axel Dörfler
ebcdd1fc61 * r33436 broke user_strlcpy() semantics: with a size of 0, "to" can be ignored,
and it's still a valid call.
* This fixes ktrace_printf() from userland.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33934 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-07 10:42:39 +00:00
Ingo Weinhold
9c7b2520c2 Added get_pthread_thread_id() function returning the Haiku thread_id of a
pthread.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33927 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-07 08:19:24 +00:00
Axel Dörfler
f40c5e3211 * common_rename() now checks the name for validity before passing it on to the
file systems, so those checks don't have to be duplicated there, anymore.
* Minor cleanup, mostly automatic whitespace.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33895 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-05 13:03:06 +00:00
Axel Dörfler
a10ac91f6d * NewBlock(), and Allocate() will now try to reuse existing memory in low
resource situations.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33892 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-05 11:14:12 +00:00
Jérôme Duval
15f18c0947 added missing posix functions
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33867 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-03 20:04:10 +00:00
Oliver Tappe
7e0d60f5b7 adding POSIX-functions llround*(), which Maxime reported missing
* copied implementations for llround(), llroundf() and llroundl() from
  glibc-2.3.2
* added corresponding declarations to math.h


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33863 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-02 19:13:15 +00:00
Axel Dörfler
8cd9a52477 * delete_owned_ports() did not maintain the sUsedPorts variable, and thus led
to bug #4864.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-29 08:08:31 +00:00
Axel Dörfler
13ce48d922 * Moved dprintf_args()/debug_puts() guts to a new dedicated private function
debug_output().
* Added a second buffer to be used when interrupts are turned off, otherwise
  dprintf_args() will now use a mutex guarded buffer to fill with vfprintf() -
  the actual sending to the outputs still needs the spinlock, so things only
  slightly improved.
* Moved private functions into the private section of the source file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33809 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-28 13:31:55 +00:00
Axel Dörfler
7d6c7206c1 * There is no need for the sPageLock to be a spinlock - a mutex should do. This
should improve the kernel latencies, as things like
  vm_page_allocate_page_run() is very expensive.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33807 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-28 10:44:29 +00:00
Axel Dörfler
954da749a5 * Added SCHED_SPORADIC, and sorted the constants the way it's done in the specs.
* Also changed their numbering.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33788 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-27 13:10:17 +00:00
Axel Dörfler
d88b4037b0 * Reduce maximum priority to B_URGENT_DISPLAY_PRIORITY; real time threads isn't
really something to play with without knowing the outcome.
* Fixed indentation/coding style violations introduced with r33783. Please take
  more care when accepting patches!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33787 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-27 12:34:27 +00:00
Jérôme Duval
f386c5910b Patch from Michael Franz (ticket #4696): sched.h and pthreads to allow setting of the thread priority
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33783 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 22:56:43 +00:00
Jérôme Duval
91844cc151 Patch from Olivier Coursiere (ticket #4064): cond_wait always return EAGAIN with an unitialized pthread_cond_t
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33779 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 19:28:14 +00:00
Axel Dörfler
250288397d * Somehow, I forgot to update set_port_owner() for the new team port list.
* Now, killing a team shut properly cause the app_server to close the windows
  of that team, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33777 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 17:23:07 +00:00
Axel Dörfler
ebcd4e1ada * Applied patch by "v" with minor changes; this allows the posixtestsuite's
pthread_create 2-1 interface conformance test to pass.
* Also fixed return values to be in the POSIX error range in case we ever switch
  them by default.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33775 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 17:11:02 +00:00
Axel Dörfler
b716ef33bf * pthread_create() will now check if attr is initialized, thus fixing bug #4827.
* pthread_kill() no longer sets errno.
* Use POSIX error codes in POSIX code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33774 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 16:49:11 +00:00
Axel Dörfler
0087f9409b * sem_entry no contains a pointer to the owning team, instead of only its
ID.
* Accidently, this should also fix bug #4839.
* Optimized _get_next_sem_info() a whole lot by iterating over the team's
  semaphore list.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 15:09:08 +00:00
Axel Dörfler
86a999adfb * delete_owned_ports() no longer scans the whole port array for ports belonging
to the owning team.
* Instead, the team now maintains a list containing the ports it owns.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33771 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 13:34:43 +00:00
Axel Dörfler
07e9fd1d84 * sem_delete_owned_sems() now grabs the team lock for a very short time, and
once only.
* Improved missing team warning.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33770 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-26 13:29:29 +00:00
Axel Dörfler
bd56fd8a4c * Removed the superfluous handOverPort variable I introduced earlier.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33748 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-23 15:08:47 +00:00
Axel Dörfler
ddbe12007a * Semaphores are now put into the team struct in a doubly linked list.
* This makes sem_delete_owned_sems() a lot more efficient; before it would need
  to scan the entire semaphore table.
* This speeds up the test build of the kernel by another 2 seconds (with
  KDEBUG=2) on my laptop.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33743 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-23 02:06:51 +00:00
Axel Dörfler
6390c0ca80 * _get_next_thread_info() should be a bit more picky about its team needs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33741 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-23 01:15:55 +00:00
Axel Dörfler
3530c3eb6b * Reimplemented the insane _get_next_thread_info() which previously just
iterated over all known thread *IDs* with interrupts disabled.
  Now it iterates over the team's thread list (going from back to front, since
  new threads are added at the front of the singly linked queue).
* Alexandre restarted Tracker quite a lot, and let the shell script run to
  reproduce a certain bug - and then wondered why ProcessController would
  take several seconds to open its windows until it passed through more than
  8 million IDs... :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33737 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-23 00:09:45 +00:00
Axel Dörfler
f28dd36b82 * The alphabet is obviously hard, moved some tracing defines at their
(hopefully) correct place.
* It seems to be even harder to understand basic locking primitives: when you
  think about it, it shouldn't surprise you that conditional variables never
  return B_WOULD_BLOCK. This fixes gdb again.
* Added tracing support to the ports subsystem.
* get_port_message() will now resize the port heap if needed (but will also
  take timeouts into account while doing so, more or less). The initial port
  space is 4MB (as before), the growth rate is the same, and the system wide
  limit is arbitrarily set to 64 MB (all swappable). A team limit has been set
  to 8 MB, but is not enforced yet. Since ports are using up address space in
  the kernel, those seems to be proper limits.
* This also fixes a strange, and rare lockup where the mouse cursor would still
  move, but everything else would basically hang, but look perfectly normal from
  KDL on the first look. As recently happened on Brecht's laptop, and debugged
  by mmlr and me: the cbuf space got used up when lots of windows wanted to
  redraw after a workspace switch. The app_server wouldn't answer anymore to
  client requests, but thought it would have done so, as LinkSender::Flush()
  doesn't care if it got a B_NO_MEMORY (the ports will now block until memory
  is available if possible, so that should not be a problem anymore).
* Improved "port" KDL command, it now also prints the messages in the port.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33735 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 23:14:10 +00:00
Axel Dörfler
5c056f9f10 * set_port_owner() was the only usable call of the port API, and of course it
was used this way in the debugger. Doing this later should be harmless,
  AFAICT, but Ingo will probably know better.
* Beware, though, the debugger currently does not work anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33730 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 16:10:28 +00:00
Axel Dörfler
e8885f2097 Basically rewrote the ports subsystem to use:
* its own heap allocator instead of cbuf - this makes cbuf superfluous, and I
  therefore removed it from the kernel. The heap is swappable, so lifts the
  kernel's resource usage a bit. In the future, the heap should grow as well;
  right now it should be at least as good as before.
* it no longer uses spinlocks, but just mutexes now for better scalability - it
  was not usable with interrupts turned off anyway (due to its semaphore usage).
* it no longer uses semaphores, but condition variables.
* Needed to move the port initialization to a later point, as swappable memory
  wasn't usable that early.
* All ports test are still passing, hopefully I didn't mess anything up :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33728 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 13:24:12 +00:00
Michael Lotz
ee7ec20503 Account for single page allocations. They aren't used anywhere right now because
the bin sizes ensure that when hitting this case it always allocates multiple
pages. This makes it more flexible for other use cases though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33726 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 13:06:15 +00:00
Axel Dörfler
4e61885e4a mmlr+axeld:
* Fixed some minor issues of heap_create_allocator() when it should use the
  kernel heap to allocate its heap structure.
* Fixed an off by one error in the max bin check.
* Changed the KDL "heap" command to allow the "stats" for any heap as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33725 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 12:30:53 +00:00
Michael Lotz
6bb413270b The allocation size wasn't updated on an area based realloc that would still
fit into the existing area. In that case further reallocs could then assume the
wrong previous size and then not copy enough from the original buffer, leading
to lost bytes at the end of the new buffer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33724 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 12:05:50 +00:00
Axel Dörfler
e0aad96f94 * Allow to use symbols as variables (prefixed with '@'). Now only tab completion
for variable names is missing B-}


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33723 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 11:44:29 +00:00
Axel Dörfler
68d9d8809b * Just use the heap instead of cbuf for send_data().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33722 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 11:42:51 +00:00
Michael Lotz
4bee71c211 * Implement per-CPU heaps. They only get enabled in case there's enough memory.
* Allow an allocator to be created on the heap to allow for non-locked
  allocators to be created.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33721 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-22 08:57:34 +00:00
Michael Lotz
5ee1f125e5 Make use of the wait status field so it can be provided in Notify() and then
read out in the ConditionVariableEntry::WaitStatus(). That way you can notify
with a specific status that can be read out on the other end.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33718 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-21 23:44:59 +00:00
Axel Dörfler
d4563f903d * Use kprintf() instead of dprintf() in KDL.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33711 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-21 18:03:07 +00:00
Axel Dörfler
e7baaab3ae * "sc" and "call" will no longer ignore if they couldn't find the thread you
asked them for.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33709 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-21 17:08:52 +00:00
Michael Lotz
432cc51cc7 Add small but very important missing detail. Before blocking it didn't set the
wait status and therefore would return directly without actually blocking.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33681 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-20 19:05:35 +00:00
Oliver Tappe
571d840abf * dropped svn:keywords property from all files that carried it
to avoid recurring problems during migration of subversion checkouts
  (restored binary files that were garbled by subversions during checkout)
* added appropriate svn:mime-type property for problematic (binary) files
* removed a single (mistyped) svn:mimetype property 
* dropped svn:eol-style property for cleanup (they all contained 'native')



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33670 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-19 22:42:52 +00:00
Axel Dörfler
86860a0c07 * debug_printf() from userland actually only worked if serial debug output was
turned on. That should explain Bruno's problems to get debug output from an
  accelerant. Thanks to Michael for the hint!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33651 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-19 08:32:38 +00:00
Axel Dörfler
39e3058e5b * Reverted r33643 - while it doubled the performance for my test case (with
high contention of the read lock (I experimented with the VM page mapping
  lock)), it actually hurt the compile performance pretty obviously.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33647 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-19 00:16:54 +00:00
Jérôme Duval
095a7d8415 using chroot with a mount point wrongly exposed the mount point name: we now avoid resolving the volume root in case we hit the IO context root.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33645 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-18 22:58:29 +00:00
Axel Dörfler
22ea088498 * The rw_lock is now using a mutex to protect its reader/writer counts. This
makes the reader case a lot less expensive, and should relieve the thread
  spinlock contention a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33643 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-18 19:52:09 +00:00
Axel Dörfler
b2a7fcb404 * Added an arch_debug_stack_trace() function that is called from the KDL loop
in case there aren't any KDL commands available yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-18 19:50:13 +00:00
Michael Lotz
b501a0387d anevilyak+korli+mmlr:
* Check for overflows in memory allocation. If someone happened to (erroneously)
  try to allocate a negative amount of memory we could overflow and crash
  because of the sizes getting messed up.
* Review and update the alignment logic which was a bit broken for the huge
  allocation case (reaching the area threshold). Also assert the results so
  next time this will be easier to spot.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33638 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-18 12:35:49 +00:00
Michael Lotz
b7204bd774 Make the swap hash lock into a rw_lock to reduce lock contention a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33622 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-17 17:24:59 +00:00
François Revol
6c21b53416 This should fix m68k build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33619 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-17 16:01:10 +00:00
François Revol
c9f536d7b1 Fix ARM build, thx Axel :P
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33618 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-17 15:26:58 +00:00
Axel Dörfler
e0d8627a73 * When you pressed ctrl-alt-del during the boot process, interrupts are disabled
when you enter arch_cpu_shutdown(), so you must not try to load the ACPI
  module to reboot. DaaT, that should fix the problem you showed me.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33617 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-17 14:59:26 +00:00
François Revol
8be612127e When debugging interrupt handlers is enabled, keep count of handled irq for each handler, to ease tracking which driver is unfriendly to others for shared irqs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33614 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-17 12:05:02 +00:00
Axel Dörfler
ec2719329c * Fixed timezones directory path.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-16 08:26:56 +00:00
Axel Dörfler
3e236885ab * Replaced C with C++ files, should fix BOM's build problem, but will likely
introduce new ones I currently cannot check.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33602 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-15 15:10:01 +00:00
Axel Dörfler
358b93352e * Moved SIGABRT to the signals that kill the process. Not sure if it's a good
idea to always send SIGKILL to the main thread, though. I'm not really getting
  more insight by reading the POSIX specs.
* Anyway, in the mean time, this fixes bug #4784.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33599 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-15 11:53:19 +00:00
Axel Dörfler
f1488adbf7 * While r33037 fixed the alignment of areas put into reserved areas, it actually
broke their placement at the end of the reserved area, which was the main
  reason #4778 happened so often (it would have been more hidden else).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33598 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-15 11:35:31 +00:00
Axel Dörfler
4124f4801b * Reserved areas would also be created in existing reserved areas in case the
space was becoming tight. This actually fixes #4778.
* Fixed overflow problem in find_reserved_area().
* Cleaned up the test app, added license.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33597 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-15 11:23:38 +00:00
Axel Dörfler
3066f3dbf8 * Reverted r33547, this closes bug #4782 - this is obviously a regression in
GCC4.
* Adapted code accordingly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33592 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-15 07:48:31 +00:00
Axel Dörfler
d5a396a60b * r33037 broke the handling of reserved areas, more specifically, it ignored
the RESERVED_AVOID_BASE flag of those, and introduced a way to fill them
  from the start. This caused #4778.
* Turned IS_VALID_SPOT() macro into an inline function.
* Removed already resolved TODO comment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33581 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-14 07:53:45 +00:00
Axel Dörfler
ea95b4d03e * Cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33580 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-14 07:50:53 +00:00
Axel Dörfler
273dbd0916 * The network syscalls now check if you try to pass a non-userland address to
them (which you previously could use to easily crash/take over Haiku).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33570 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-13 07:19:18 +00:00
Axel Dörfler
361f5cdfaf * Build fix for the boot loader (it's now using the new utility functions as
well). Sorry!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33560 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-12 19:42:50 +00:00
Axel Dörfler
b74a098352 * Got rid of the duplicated functionalities provided by RWLocker.cpp, and
Locker.cpp.
* The services are now using recursive_locks, and rw_locks instead.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33548 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-12 14:29:05 +00:00
Michael Lotz
3bb69a8235 * Use mutex and rw_lock and the proper AutoLockers as in the kernel version, as
these interfaces are now available.
* Don't be quite so paranoid by default, the checks that are on by default
  should be enough to detect most memory corruptions.

This makes the debug heap way more usable, so much that you can even use it as
your normal everyday heap without noticing much performance impact (it has quite 
a bit of additional memory overhead though).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33544 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-12 11:29:25 +00:00
Michael Lotz
93b63126e1 Adding mutex and rw_lock with the same interface as the kernel versions to
libroot. The mutex is a simple benaphore, the rw_lock is pretty much the same
as the one from libkernelland_emu but uses a mutex per lock instead of emulating
a global thread lock. Also added MutexLocking and RWLock{Read|Write}Locking and
AutoLockers based on them. It's cased with __cplusplus so the locks are also
usable from C. Everything's currently exposed in shared/private/locks.h but I
think we should make these locking primitves public.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33543 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-12 11:19:33 +00:00
François Revol
dc33329747 First attempt at an Amiga boot sector, not yet working.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33535 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 20:28:44 +00:00
Bruno G. Albuquerque
891a50b2ae - Fix typo that broke the GCC4 build but not the GCC2 build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33529 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 17:31:00 +00:00
Michael Lotz
7ebd7cfc40 Add a vm_page_allocate_page_run_no_base. It bases its search on the pages found
in the free and/or clear queue. This performs better in the case where only few
pages are free/clear but performs worse in the case where there are a lot of
usable pages. It's not used anywhere but it might come in handy one time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33527 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 16:55:21 +00:00
Michael Lotz
7a4d60459e Implement combining scattered physical pages using seperate iovecs in
PageWriteTransfer. This makes the transfer accept virtually contiguous pages,
where the offset is contiguous on either end of the current transfer, but where
the pages aren't physically contiguous. It will then add seperate iovecs for
these pages (32 at max right now). This reduces the number of IO requests
generated and allows for optimizations down the IO path (like in the physical to
virtual mapping case for example).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33526 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 16:52:19 +00:00
Michael Lotz
303727515e Virtualize the buffers using IOBuffer::GetNextVirtualVec(). This removes the
need for the IO -> InternalIO indirection as it is always fed virtual buffers,
which simplifies things a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33525 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 16:50:50 +00:00
Michael Lotz
32e2b6a118 Provide a way to directly request virtual vecs from an IOBuffer. If the buffer
is virtual already it just returns the vecs directly, if it is physical it takes
over the task of virtualizing the vecs either using vm_map_physical_memory_vecs,
if there are multiple vecs or more than one page, or falls back to page wise
mapping if mapping fails or is not needed. In the best case, scattered physical
pages are mapped into one linear virtual buffer so that subsystems operating on
virtual memory only get a single vector and can then burst read/write.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33524 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 16:49:44 +00:00
Michael Lotz
44778a8a28 Introduce vm_map_physical_memory_vecs. It is like vm_map_physical_memory but
takes a list of iovecs describing the physical pages to be mapped. With it one
can map a set of physically disjoint pages into one linear virtual range. This
is a private API right now, but we might want to make it public as
map_physical_memory_vecs alongside map_physical_memory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33523 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-11 16:48:03 +00:00
Michael Lotz
1af7d11504 * Rework page writing to combine page writes where possible. For now the pages
are required to be physically contiguos, which should be reworked to put them
  into seperate iovecs. Still this manages to combine a great deal of page
  writes into larger bursts already. Reduces the amount of IO requests being
  scheduled (and greatly benefits media where page wise writes are slow when
  they are accessed through a non-IOScheduler path, i.e. USB mass storage until
  that is properly implemented).
* Abstracted per page page writing tasks into a PageWriteWrapper class.
* Abstracted per transfer page writing tasks into PageWriteTransfer class which
  formerly was the PageWriterCallback.
* Use both classes from the PageWriterRun and from
  vm_page_write_modified_page_range to remove code duplication.
* Adjusted synchronous VMAnonymousCache::Write() to cope correctly with larger
  iovecs and more than one iovec. It assumed that there was exactly one page per
  vector previously.
* Introduced MaxPagesPerWrite() and MaxPagesPerAsyncWrite() to VMCache to allow
  a cache to specify restricitions. VMAnonymousCache does restrict the max pages
  to 1 for WriteAsync right now as I didn't feel like reworking that one to cope
  with non single page writes just yet.
* Pulled out PageWriteTransfer methods for better readability.
* Some typo fixes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33507 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-10 22:37:26 +00:00
Michael Lotz
f3bd145c09 When the need for physical to virtual mapping arises because of emulating IO
reads or writes for old style drivers, map the physical memory at once. Since
USB is pretty much the only one affected and there small reads/writes are
exponentially slower, the performance gain of the burst transfer far outweighs
the additional overhead of the mapping. Still this could be further optimized
and will eventually be superseeded by also providing a physical memory API in
USB. For now it should bring back USB reads to an acceptable level. Writes are
still page wise though because of how writing back memory works in general.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33503 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-10 19:55:13 +00:00
Ingo Weinhold
aa6f54aa24 Amended the {user,debug}_strlcpy() fix: Due to the strlcpy() semantics to
always return the source string length, we can't really prevent an overflow
of the source address.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33489 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-09 03:07:11 +00:00
Michael Lotz
0b4d87da22 Add missing word in comment.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33479 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-07 13:29:19 +00:00
Axel Dörfler
ab7516c8f3 * Fixed a dead lock when drivers were scanned: we must not hold the devfs lock
when scanning for drivers, as that reverts the standard locking order with
  locks like the device manager lock. There is now a dedicated scan_lock for
  each directory.
* get_device_name() now locks itself which also adds a missing lock in the
  B_GET_PATH_FOR_DEVICE ioctl().
* Minor refactoring; the directory init code was duplicated over several places
  in the source file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33465 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-06 12:56:21 +00:00
Axel Dörfler
c0f44af061 * Fixed PXE boot loader build again (hey mmu_man!).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33456 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-06 09:25:35 +00:00
Ingo Weinhold
8a71915a9d Made the {debug,user}_{mem,strl}cpy() and user_memset() functions deal with
address overflows. Apparently at least the x86 string instructions generate
a general protection fault instead of a page fault, and we only use the fault
handler in the latter case (maybe we should change that, too). Fixes #4714.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33436 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-05 09:54:40 +00:00
Ingo Weinhold
8ad4a2e971 Improved comment.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33392 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 09:31:20 +00:00
Ingo Weinhold
d815bfef61 Fixed build with tracing enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33391 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 09:30:46 +00:00
Ingo Weinhold
37e6de5d4c Don't destroy tracing entries. This is not necessary and even harmful, if the
code is no longer loaded, e.g. when the module has been unloaded or the tracing
buffer was reattached from a previous session.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33389 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 04:38:19 +00:00
Ingo Weinhold
d6778355ee * <DiskDeviceTypes.h>: Removed kPartitionTypeIntel{Primary,Logical} constants.
* Added new header headers/private/system/disk_device_types.h, which defines
  the <DiskDeviceTypes.h> constants as macros and which can be used where the
  constants cannot be used. The constants are defined using the macros, so now
  there's only one place where the string literals should be specified.
* Use the macros in the partitioning systems. I was too lazy to also adjust the
  file systems -- most of them seem to hard-code the string literal yet.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33386 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:07:42 +00:00
Ingo Weinhold
a9689e8492 * VFS:
- Fixed vfs_get_vnode_from_fd() return type.
  - Added vfs_open_vnode().
  - Added a "bool traverseLeafLink" parameter to vfs_get_fs_node_from_path().
    It was always resolving symlinks.
* device manager/devfs:
  - devfs: get_node_for_path() no longer resolves leaf symlinks. That still
    doesn't help with file disk devices, as creating partition wouldn't work
    anyway.
  - Pulled the module-related implementation part of BaseDevice into new class
    AbstractModuleDevice and made all methods of BaseDevice virtual. Small
    adjustments to devfs to be happy with the new BaseDevice interface.
  - Added BaseDevice subclass FileDevice, which maps the interface to a file's
    file descriptor. Still got a few TODOs, but should basically work.
  - Use FileDevice for publishing file disk devices in devfs. Now those do
    actually work, though there's some BFS trouble with one of the images I
    tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33385 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:06:34 +00:00
Ingo Weinhold
3c4721f516 The B_DISK_DEVICE_IS_FILE flag is cleared by KDiskDevice and needs to be reset.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33383 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:04:32 +00:00
Ingo Weinhold
80ea5e3508 Fixed incorrect return value of _user_get_file_disk_device_path().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:03:56 +00:00
Ingo Weinhold
c51d6579e4 Fixed incorrect uses of user_{strl,mem}cpy() in the kernel debugger. This could
break stack traces.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33381 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:03:16 +00:00
Ingo Weinhold
be51dd0f4c Added debug_strlcpy() for use in the kernel debugger.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33380 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-10-01 03:02:34 +00:00
Ingo Weinhold
268335a069 After creating a userland thread we didn't set up the breakpoints for it.
Fixes #4665.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33369 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-30 08:40:55 +00:00
Stefano Ceccherini
fee1bc8eed Back to timer 2, since timer 0 doesn't work at all.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33368 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-30 06:34:15 +00:00
François Revol
858a20cab8 Patch by Vincent Duvert:
Remove the 4 cores limit at boot, and fix the allocator to handle 8 cores.
There are still performance problems, but this allows booting with 8 cores.
WARNING: since this changes x86 platform kernel args, you really don't want to update haiku_loader and kernel_x86 separately!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33349 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-29 13:07:10 +00:00
Stefano Ceccherini
ea40a61a84 Some big changes, still not working on my laptop, since hpet interrupts
aren't routed correctly over the 8259, it seems.
- Removed passing the hpet_regs around, since there's a static variable.
- Added lots of debug dprintfs.
- Fixed setting the timer interrupt to edge
- Timer is initialized once.
- Use the timer 0 instead of 2.
- Renamed register definitions to be more readable
- Use 64 bits registers and unions where applicable.
- Other things I don't remember


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33345 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-29 08:36:36 +00:00
Stefano Ceccherini
8593bcad87 Use the hpet defines in the source.
Also shortened some defines using "TN" instead of "TIMER". It's also
the same scheme used in the specs


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33334 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-28 13:14:16 +00:00
Stefano Ceccherini
1d958a301e Moved the "disable APIC" menu(s) to smp.cpp.
Also only enable them if there's an APIC.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33333 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-28 09:42:59 +00:00
Ingo Weinhold
ac106be534 Inherit the disable_debugger() flag to a fork()ed child. load_image() doesn't
-- I'm undecided whether it should, too. Fixes #4642.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33330 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-28 02:54:38 +00:00
Stefano Ceccherini
6dc4fd11a2 Uncommented the hpet timer from the timers list.
Lowered its priority of hpet timer so it doesn't get picked up first
(yet)
Changed the debug output to be conditional.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33292 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 10:48:37 +00:00
Stefano Ceccherini
6d92e80531 - Moved timer conversion to a method, and added LL to the conversion
factor to avoid compiler issues.
- Removed some useless and commented debug stuff.
- Now prints also the global HPET configuration.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33291 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-09-25 10:36:39 +00:00