Commit Graph

960 Commits

Author SHA1 Message Date
Axel Dörfler
573c4336a3 Implemented quite a hack to solve the lockless get_memory_map() problem (bug #349):
when called with interrupts turned off, get_memory_map() will now call the new
vm_translation_map_ops::query_interrupt() call.
Under PPC, this is trivial (at least right now), but on x86 we need to make sure
we have access to the page table entry, ie. we need to create an area that points
to its own page table entry, so that we can map in the page table entry containing
the address we're looking for. It's not really nice, feel free to come up with
a cleaner solution :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17280 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-30 17:45:33 +00:00
Axel Dörfler
77a08c68e8 Changed the way handlers for edge triggered interrupt are called: now, we
always call all handlers in this case, but we still try to return the correct
return code (ie. B_HANDLED_INTERRUPT and B_INVOKE_SCHEDULER).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17278 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-30 13:56:21 +00:00
Axel Dörfler
f7a446f46f Oops, actually forgot to press "save" in the editor to include the real thing...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17277 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-30 13:44:24 +00:00
Axel Dörfler
99df69077c For level triggered interrupts, we now acknowledge the interrupt after having called
the interrupt handlers, not before (like we do for edge triggered ones).
This should prevent hardware from issuing a second interrupt when the software driver
is still busy handling the first.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17276 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-30 13:43:05 +00:00
Axel Dörfler
5886ae3213 Finally (!) fixed that stupid bug that prevented at least some Pentium-M laptops to
work correctly when on power supply (ie. when running at full speed). Turns out we
misdetected a spurious interrupt on line 15 - we now ignore them completely which
seems to fix that problem.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17275 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-30 13:35:53 +00:00
Michael Lotz
17fee3eab7 Removed the extra info struct in the cpu_ent union and made said union a struct instead. Same as r1137 in NewOS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17273 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-29 22:38:19 +00:00
Michael Lotz
2a03240eb1 Reverted my last change as it turned out that the lazy FPU state handling was not SMP safe afterall and the performance gain is questionable. Maybe it'll be implemented correctly in the future. Sorry for any inconvenience this may have cost.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17272 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-29 22:10:04 +00:00
Michael Lotz
7eee76e65a Implemented lazy FPU state save/restore. In the end mostly ported from NewOS. SMP safe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17251 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-27 22:02:48 +00:00
Axel Dörfler
11add5a5d7 First baby step towards a lockless get_memory_map(): vm_get_current_user_address_space()
no longer needs to lock address space hash table - that also makes the lookup much
faster, too (and a direct pointer is used instead of a hash lookup).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17246 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-27 17:46:19 +00:00
Axel Dörfler
4827dbe47a Fixed a bug in the VFS that could cause BFS to corrupt an inode:
dir_remove() did not normalize the path, and thus, could forward a "." as
name for the removed directory - which BFS didn't catch because it assumed
our VFS would work correctly...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17165 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-18 17:40:27 +00:00
Axel Dörfler
a88c592fb3 Instead of ending up in an endless loop, fs_sync() will now bail out in
case get_vnode() fails.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17162 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-18 14:50:36 +00:00
Axel Dörfler
fde87a1094 Instead of waiting forever, get_vnode() will now fail after 3 seconds if the
vnode is not becoming unbusy (right now it even panics, but that can be removed
later on).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17161 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-18 13:55:47 +00:00
Axel Dörfler
80fda87e9c find_thread() now returns B_NAME_NOT_FOUND when it doesn't find the thread
as stated in the BeBook - this fixes bug #458 as Tracker directly compared
with that error code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17144 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-16 17:53:10 +00:00
Axel Dörfler
b2536cb5d6 Fixed bug #483:
* vfs_get_fs_node_from_path() now also work for absolute paths again (but
  still for relative ones from the volume root) - it just tests if the
  mount IDs fit, so it only returns successful if the path really is on
  the desired mount.
* the Disk Device Manager publish functions now call devfs_publish_*()
  correctly (by omitting the "/dev/" mount point).
* devfs_publish_partition() now accepts absolute device paths but relative
  partition paths.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17138 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-16 11:44:54 +00:00
Michael Lotz
b026647574 Changed the temporary buffer to be static to avoid using that much stack. Replaced wrong maximum buffer length (oops).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17137 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-16 10:56:00 +00:00
Michael Lotz
1df23ecc52 Should finally fix the eaten up messages. We obviously must not use the output buffer to write the repeat count as the output buffer already contains the new message...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17131 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-14 12:38:31 +00:00
Axel Dörfler
9a11448fbd vfs_get_fs_node_from_path() didn't work correctly and ignored the mount_id
(ie. it only worked for absolute paths, but it shouldn't work for those at
all).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17127 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-13 18:06:30 +00:00
Axel Dörfler
97e069713b Added a "reenter" parameter to the {read|write}_pages() functions to give file
systems a chance to know if they have locked already.
This fixes a locking problem in BFS where one thread tried to acquire two read
locks (where someone else trying to acquire a write lock would have caused a
dead lock).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17108 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-12 13:34:04 +00:00
Michael Lotz
2f5143505b Another try at removing the "Last message repeated 1 times.", this time with locking.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17099 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 21:11:50 +00:00
Michael Lotz
6ac6b512a0 Reverted my last change as it causes a segfault with syslog output enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17094 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 19:40:49 +00:00
Axel Dörfler
8645479b36 * cache_io() could insert a second page at the same position in the vm_cache
since it unlocked the cache while waiting on a busy page. Now, we're filling
  the pending request before unlocking the cache.
* Fixed the deadlock I mentioned in the last commit: if a page fault happens
  at the same time we're trying to read/write from/to a page, we no longer
  fight for the BFS inode lock, but eventually doing the job twice if needed.
  Will need to go over the "write modified" functions to make sure they are
  behaving as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17091 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 18:48:04 +00:00
Axel Dörfler
be891a5e5d No longer counts "\n" as repeated string - this seems to fix at least the cases
where I noticed missing debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17090 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-11 18:40:46 +00:00
Michael Lotz
d7faea3f20 Replaced "Last message repeated 1 times." with just reprinting the message (requested by Jerome Duval).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17060 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-10 21:28:43 +00:00
Axel Dörfler
675c19c9cf * fs_sync() and free_vnode() now use the file system's fsync() hook to write back
changes made to a file instead of directly using vm_cache_write_modified() -
  besides making the file system more independent from the file cache, this also
  works around a possible dead lock (that is to be fixed in a later commit).
* fs_sync() no longer uses vnodes from the mount's vnode list directly to write
  back the changes made to them, but gets them via ID instead - this makes sure
  the vnode is in a valid state and fixes a race condition with free_vnode().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17059 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-10 21:22:24 +00:00
Michael Lotz
f51fb4696c Corrected the repeat checks (did not compare the right buffers) and added a length argument to debug_puts() to safe the strlen in the syslog case. Also removed some leftover.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16991 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-03 20:48:30 +00:00
Michael Lotz
3647d70ded Replaced the hash based approach to repeat detection with the probably more efficient strncmp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16970 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-02 16:45:04 +00:00
Michael Lotz
3352a462a7 Implemented the "Last message repeated x times." thing in the kernel (hash based).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16968 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-04-02 16:23:47 +00:00
Axel Dörfler
af3e5cd947 Renamed our runtime loader from rld.so to runtime_loader, and moved it into beos/system/.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16936 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-30 18:08:51 +00:00
Axel Dörfler
2a62d0d6c5 Added a second pass to the boot device retrieval in case nothing has been found.
Right now, the size of the device is ignored in the second pass. Maybe this helps
with bug #357.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16917 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-29 00:16:57 +00:00
Axel Dörfler
606e0d364e * Factored out the vnode disconnection code from fs_unmount() to a separate
function, and added a vfs_disconnect_vnode() for other kernel components.
* devfs_unpublish_device() can now optionally make use of this call.
* Fixed the type check of devfs' unpublish_node().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16907 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-28 01:13:12 +00:00
Axel Dörfler
065aa7f66c Added a basic unpublishing function for drivers, not yet tested, though (and even
though it looks so simple, I see no reason why it shouldn't work 8-)).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16906 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-28 00:13:44 +00:00
Axel Dörfler
fabe8c62ff The kernel boot code now supports the unknown bus/device method to identify the
boot volume. The other (better) methods are now disabled in the boot loader.
This fixes bug #241.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16895 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-27 17:01:10 +00:00
Axel Dörfler
d140fed68f Turned off some debug output, the device tree is no longer dumped (was a partial
tree only, anyway, as it was dumped before the recognition of any devices).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16893 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-27 15:14:30 +00:00
Axel Dörfler
c918a987a0 * Removed my old doubly linked list implementation, and stay with Ingo's.
* Adapt other sources where needed (the boot loader's RootFileSystem still
  used the old implementation).
* Implemented RootFileSystem::Rewind().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-27 10:27:05 +00:00
Axel Dörfler
7d2fafcac5 Forgot even more debug output...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16882 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-26 18:45:54 +00:00
Axel Dörfler
61106f7e86 Forgot to remove some debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16881 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-26 17:11:43 +00:00
Axel Dörfler
c14a34a65f * Improved kernel ELF loader (and made it more similar to the one from the boot
loader): it now supports holes between segments, and accepts any segment order.
* Renamed elf.c to elf.cpp and fixed warnings.
* Renamed elf_image_info::dynamic_ptr and eheader to dynamic_section and elf_header.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16878 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-26 15:58:43 +00:00
Axel Dörfler
342c2a73ab Improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16871 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-24 21:27:01 +00:00
Axel Dörfler
5ba2a3839d Improved the filter capabilities of the "ports", "port", "sems", and "areas" debugger commands.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16870 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-24 12:59:23 +00:00
Axel Dörfler
db823da57e * Even though our current heap is a temporary solution, the heap size depends
now on the amount of memory installed in the system. Ie. if you have only
  128 MB the kernel heap will be only half in size.
* Minor cleanup in vm_page.c, renamed some variables to match our style guide.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16838 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-19 15:02:21 +00:00
Axel Dörfler
5f0bf2a3e1 We now track how many pages are in a vm_cache. Therefore, the area_info.ram_size
now reflects the number of pages in the areas cache, instead of just the size of the
area.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16834 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-18 20:17:31 +00:00
Axel Dörfler
66b7a0f477 Renamed the _kern_init_heap_address_range() syscall to _kern_reserve_heap_address_range()
and made it more powerful.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-18 12:52:01 +00:00
Axel Dörfler
c864c43bab Fixed warning I just introduced.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16793 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-14 20:29:50 +00:00
Axel Dörfler
baf7b0adf0 Broke the build once more: didn't remember that gettimeofday() was built
for the kernel as well, and thus we need to export _kern_get_timezone(),
too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16792 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-14 20:22:50 +00:00
Axel Dörfler
f46bdd1c9a Added a _kern_get_timezone() syscall that can be used without needing to
re-evaluate the timezone file over and over.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16785 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-14 14:29:56 +00:00
Axel Dörfler
33dd85501f Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16784 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-14 14:27:59 +00:00
Axel Dörfler
5d35aa2833 I don't think kill_thread() is actually supposed to wait for the thread
to be killed. Reverted ShutdownProcess.cpp to continue to use kill_team()
instead of sending a signal.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16780 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-14 01:54:49 +00:00
Axel Dörfler
51aacbbb39 * open_module_list() put the wrong base path length onto the stack, and thus,
no on-disk modules could be found... (since revision 16584).
* iterator_get_next_module() now makes use of the KPath features, and doesn't
  build the new path manually anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-12 19:48:28 +00:00
Axel Dörfler
b0976eac74 * Reduced the effects of "priority boost on sem release" to a minimum;
the thread priority is now increased by one, we'll see how that turns
  out for real (I'm not even convinced that this feature is a good idea
  at all yet).
* Enabled debugging the last semaphore acquirer by default.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16744 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-12 17:24:31 +00:00
Axel Dörfler
6d24fdc557 Better means to debug apps that try to acquire kernel semaphores.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16695 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-10 23:55:50 +00:00
Axel Dörfler
abb84c7d51 Removing the nodes from the unused list in fs_unmount() had the side effect that
the root vnode was tried to be removed as well (which resulted in a crash).
Since playing with the root node reference count is a bad idea anyway and opens
a big race condition (with regards to the unused list), we no longer do that
now, until it's safe.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-08 22:57:53 +00:00
Axel Dörfler
17372b761e * If there are no free ranges left, the block cache will now reuse older
blocks - this is not enough, though as it would also need to ask other
  volumes to free ranges.
* Increased the number of blocks to free in case of low memory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16663 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-08 21:43:45 +00:00
Axel Dörfler
f951ca0e6a Fixed a couple of bugs:
* fs_unmount() freed vnodes, but didn't remove them from the unused list if
  needed.
* vfs_get_module_path() could put a vnode twice under several situations.
* vnode_path_to_vnode() now always puts the dir vnode, even if the provided
  path is NULL. Documented the fact that it does eat the ref, too.
* Added a to-do item in vfs_get_vnode_cache() about a possible problem.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-08 21:42:14 +00:00
Axel Dörfler
4d664f91ca * Closing a port now also deletes the port's semaphores, so that a pending write_port(),
read_port() or port_buffer_size() will fail immediately.
* Made the functions above plus port_count() support this new way of closing
  a port.
* All of Marcus's port tests now succeed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16655 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-08 17:09:20 +00:00
Axel Dörfler
33a9adb376 * Added a wait_for_thread_etc() function that allows specifying semaphore flags
and a timeout.
* _user_wait_for_thread() was not interruptible before, ie. Control-C wouldn't
  work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16654 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-08 16:41:03 +00:00
Axel Dörfler
457c814fdc read_port() and port_buffer_size() will now fail with B_BAD_PORT_ID when called
on a closed port with no messages left.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16647 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-08 15:08:48 +00:00
Axel Dörfler
311bcf391f Fixed a possible deadlock I've introduced earlier (since create_sem() calls
vfs_free_unused_vnodes()); the vnode mutex is now hold for much shorter times
only:
* Rewrote advisory_locking creation/maintenance to hold the vnode mutex only
  for very short times.
* the vnode mutex is no longer held during file cache construction; instead,
  the vnode is marked busy.
* Implemented an (incorrect for now) get_advisory_lock()


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16635 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-07 20:40:38 +00:00
Axel Dörfler
b4499305c7 vm_cache_resize() could remove one page too many, and thus eventually free
a modified page that mustn't be removed. This fixes bug #110.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16613 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-06 22:28:40 +00:00
Axel Dörfler
9f6376a0c7 * get_vnode() did not decrease the sUnusedVnodes counter when taking one node
of that list.
* Added a vfs_free_unused_vnodes() function that calls the low memory handler
  directly.
* create_sem_etc() now calls the above function in case there are no semaphores
  available anymore; this usually frees up to 2 semaphores per node (one from
  the cache if there is a file cache attached, and eventually one from the
  file system).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16610 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-06 16:18:52 +00:00
Axel Dörfler
d3fbce573c * Added a debugger command "info" that dumps some basic system usage info.
* Renamed OBOS_ARCH macro to HAIKU_ARCH.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16608 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-06 13:40:36 +00:00
Axel Dörfler
d98d96e9e5 Added debugger command that dumps info about the vnode usage.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-06 13:39:04 +00:00
Axel Dörfler
611b96cd42 Fixed "strange" debugger commands in help listing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16606 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-06 13:38:16 +00:00
Axel Dörfler
b420ef6461 * Many VM area creation functions just panicked when a vm_store, vm_cache,
or vm_cache_ref couldn't be created, instead of cleaning up and returning
  an appropriate error.
* vm_cache_ref_create() no returns a status_t instead of the vm_cache_ref
  (as that's part of the vm_cache anyway).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16602 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-06 13:06:10 +00:00
Axel Dörfler
8413da2383 Like the comment above said, vfs_lookup_vnode() doesn't grab a ref to the vnode,
so we better shouldn't release it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-05 20:55:35 +00:00
Axel Dörfler
0254f09df2 It's not so problematic if a busy vnode was released; what is problematic is
if that was the last ref.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16590 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-05 20:54:17 +00:00
Axel Dörfler
0d4c16e0c0 * Reduced the stack usage of most of the I/O paths - there were several places
that put one or more full paths on the stack before, which could cause some
  problems under certain conditions.
* Cleaned up KPath, ie. use size_t instead of int32 where appropriate, added
  license.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16585 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-05 18:11:59 +00:00
Axel Dörfler
5d13c758d1 * Reduced stack usage for iterator_get_next_module() quite a bit by no
longer pushing a whole path on the stack.
* open_module_list() now adds the prefix to the paths it puts on the
  stack to reduce the amount of searching to do (this probably wasn't
  done before because of the earlier boot method via bootfs which
  didn't allow for deep path names).
* module.c is now module.cpp (for KPath usage).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-05 18:09:19 +00:00
Axel Dörfler
bb674499f8 * Finally implemented B_WATCH_MOUNT, ie. Tracker now shows newly mounted volumes
(mounting still only works from the Terminal).
* Shuffled functions in node_monitor.cpp around to clearly differentiate between
  private, private kernel, and public kernel functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16575 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-03 11:48:49 +00:00
Axel Dörfler
d5062208bb * Added a new list_insert_item_before() function that inserts a new item
before another one in the list.
* The video modes in the boot loader are now sorted (by resolution, larger
  resolution comes first). Doubled entries are automatically removed; this
  fixes bug #192.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16572 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-02 22:48:47 +00:00
Axel Dörfler
f94b06f992 Implemented SSE2/3 support (tested with VLC).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16569 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-03-02 17:12:56 +00:00
Ingo Weinhold
e68c6184ca user_debug_exception_occurred() now checks whether a non-default signal
action has been set for the signal. If so, it doesn't try to install a
debugger, but simply lets the caller deliver the signal.
Fixes bug #237 (VLC entering the debugger when checking for processor
extensions).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16556 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-28 23:03:06 +00:00
Marcus Overhagen
89d76e508d changed get_cached_block() to no longer use a reference argument
modified to panic when an invalid block is requested (to find fs errors)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16537 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-27 18:03:42 +00:00
Axel Dörfler
3ea7d1fcbe Minor cleanup, now returns B_NAME_TOO_LONG if the query string or mount parameters were
longer than 64k.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16527 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-27 13:23:29 +00:00
Stephan Aßmus
fb39ecb534 * Added an "iospace" debugger command.
* Fixed broken "full sem" mechanism.
* Fixed recycling of previously mapped IO space chunks. Should avoid the
  panic() call earlier introduced by Marcus.

(tracked down by axeld and bonefish over the course of three days
(in between skiing) and finally nailed on the bus back home)



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16511 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-26 17:44:27 +00:00
Stephan Aßmus
b270799715 * read_chunk_into_cache() might not have put back physical pages
in case of a read error.

(coded by axeld)



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16510 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-26 17:41:38 +00:00
Jérôme Duval
5a2ad00cab fix a TODO in _user_mount : added an argsLength parameter
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16480 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-20 18:04:27 +00:00
Axel Dörfler
333dcda418 The kernel debugger now only puts printable characters into the input buffer.
This should eliminate the cases where commands doesn't seem to be accepted (but look fine on screen).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16453 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-17 12:21:28 +00:00
Axel Dörfler
1be006f2cf No longer says "unknown command" to an empty input string in the debugger.
This fixes bug #189.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16452 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-17 11:43:47 +00:00
Marcus Overhagen
e87d23b1a7 added a panic into a loop that often causes a deadlock here
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16381 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-13 17:52:35 +00:00
Axel Dörfler
3cd6e76965 /dev/dprintf and _kern_debug_output() weren't dumped to the syslog before, even
if "syslog_debug_output" was set to "true". Reported by Jerome!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16290 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-07 23:45:44 +00:00
Axel Dörfler
d31d9974ba Slightly improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16288 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-07 16:55:06 +00:00
Ingo Weinhold
f4b0f67cf6 Added [arch_]int_post_device_manager() which is invoked after
the device manager is initialized. For x86 it does nothing, but
for PPC it searches for a supported interrupt controller and
remembers it for later use.
arch_int_{enable,disable}_io_interrupt() are implemented as
well as handling of external exceptions (aka as I/O interrupts).
We'll see later how well that works.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16271 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-07 02:50:32 +00:00
Ingo Weinhold
3277aade49 * Added get_root() to device_manager_info. Surprisingly enough, it
returns the root device node. Now its actually possible to
  traverse the device node tree without a node to start with.
* Fixed execution order problem in dm_get_next_child_node(). The
  supplied node was put first (which could cause its immediate
  deletion), but was still accessed thereafter.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16268 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-07 02:29:14 +00:00
Axel Dörfler
811ada6cae Fixed wait_for_resources() locking, reported by Ingo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16218 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-03 17:12:34 +00:00
Axel Dörfler
d14aab0dca Changed the way how CPU activity is monitored: instead of taking the active
time of the idle thread as a measure, we now compute the CPU activity on
each thread switch - the time the CPU worked is the total of user and kernel
time a thread spent during its quantum.
Unlike before, this mechanism works correctly on SMP machines. I hope this
works as expected :)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16193 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-01 20:03:55 +00:00
Axel Dörfler
df213cedbc * CPUs can now be disabled - that is, they will keep idling.
* Added syscalls _kern_set_cpu_enabled() and _kern_cpu_enabled().
* scheduler.c::sRunQueue::tail was not maintained at all; changed sRunQueue to
  be a simple thread pointer instead of a struct thread_queue.
* Turns out we're monitoring CPU activity incorrectly when we've got more
  than one CPU.
* Renamed the global CPU array from "cpu" to gCPU.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16186 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-01 16:09:05 +00:00
Axel Dörfler
99085d6771 Added an extra debug function that dumps all iframes in case the stack crawl
doesn't work correctly for some reason.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16180 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-01 12:35:10 +00:00
Axel Dörfler
562c5a27d9 Make sure the compiler knows what we want.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16179 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-02-01 12:34:03 +00:00
Axel Dörfler
f1d806fe5d Fixed call_all_cpus(): it shouldn't call the function synchronously; inter-CPU
synchronization as done in init_mtrrs() failed because of that (let the system
hang).
Unfortunately, MTRR still doesn't work on my dual PIII with SMP enabled; that
was just one reason it didn't work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16173 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-31 18:30:34 +00:00
Axel Dörfler
204131dc97 Added a real yield function to the kernel (using the next_priority approach).
The test application lets run a thread at the highest priority that calls
yield all the time - the system stays responsible when it runs, so it seems
to work fine :)
Changed the malloc implementation to use _kern_thread_yield() instead of
snoozing.
We should think about making this call public, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16166 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-31 02:29:02 +00:00
Axel Dörfler
d14af9fde6 Introduced a next_priority field to struct thread that will be used when
enqueueing a thread to the run queue.
This mechanism is now used for the thread priority boost on semaphore
release. Also, those threads are no longer made real time threads, they
now get a temporary priority of B_FIRST_REAL_TIME_PRIORITY - 1.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16165 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-31 01:58:49 +00:00
Axel Dörfler
5d16441307 Now usually ignores the length of the data segment as well.
It now works fine on my P4 system as well :-)
But since the BIOS area is not identity mapped, it might work on fewer systems
than it does in BeOS R5.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16154 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-30 16:32:47 +00:00
Axel Dörfler
afef4f3fff The syslog_daemon now ignores zero length messages, and the kernel's syslog
mechanism doesn't send them out any longer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16153 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-30 16:09:24 +00:00
Axel Dörfler
bd610d2fcd * Added kernel settings for APM - defaults to disabled (since it doesn't work
on at least one of my systems, it only works on 3 of them...).
* Added APM safemode setting.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16152 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-30 14:43:38 +00:00
Axel Dörfler
8a1f6775b9 * You can now specify a thread when using the "unreal" debugger command.
* Added a thread priority column to the thread list.
* Added "realtime" command that lists all real-time threads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16141 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-29 19:50:00 +00:00
Axel Dörfler
5da68569d0 The APM now successfully shuts down my IBM ThinkPad T40. It's still disabled
for more testing on other machines.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16136 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-29 15:51:33 +00:00
Axel Dörfler
036b999b54 Unbroke the build (ps2.h was suddenly missing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16121 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-28 18:48:50 +00:00
Axel Dörfler
afd6dfc8b4 Implemented first basic APM driver. Only tested with QEMU so far, that's why
it's currently disabled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16120 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-28 18:11:20 +00:00
Axel Dörfler
1bb74eb185 This fixes the work-around made in r16105, and some more:
* cached_block::parent_data can be NULL in a sub transaction in case the
  block wasn't part of the parent transaction (but not in low memory
  situations). cache_abort_sub_transaction() and cache_detach_sub_transaction()
  didn't account for this, though, ie. the block data could end up
  corrupted.
* Renamed cached_block::original in original_data.
* Renamed cached_block::data in current_data.
* Added some comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16108 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-26 21:02:53 +00:00
Jérôme Duval
2e5ac35292 fixed some traces
cache_abort_sub_transaction now doesn't crash if parent_cache is NULL (happens in low memory situations)
Axel, please review and fix if needed


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16105 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-26 16:42:12 +00:00
Ingo Weinhold
f602da2b72 * Turned the kernel platform support from a library into an object.
* Moved the Open Firmware function platform_get_next_device() from
  the boot loader into the kernel (renamed to of_get_next_device()).



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16101 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-26 15:06:59 +00:00
Ingo Weinhold
6cdd45a94b Added enum to PPCPlatform to identify the platform.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16099 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-26 14:59:16 +00:00
Axel Dörfler
924479179b Implemented on screen debug output during boot - to be enabled in the boot loader
safemode menu.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16081 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-25 16:12:10 +00:00
Axel Dörfler
979aeaf71c Fixed bug #97:
* BEntry::Remove() now uses _kern_remove_dir() for directories.
* Added fd parameter to _kern_remove_dir().
* Fixed LibBeAdapter's _kern_unlink() to only work on files, and
  added _kern_remove_dir() for directories.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-25 11:12:21 +00:00
Axel Dörfler
7f370a1f89 * Fixed settings evaluation.
* exchanged sBlueScreenEnabled and sBlueScreenOutput (so that they better
  match the sSerialDebugEnabled and sSyslogDebugEnabled variables).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16077 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-24 21:52:53 +00:00
Axel Dörfler
ad4afa7409 Added unused ring_buffer_write_to_port() implementation - we might never use it,
but it shouldn't hurt to have it in SVN.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16076 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-24 21:50:41 +00:00
Axel Dörfler
eb2fc29abd Implemented syslog support for the kernel debug output. Not fancy at all yet, but
it seems to be working fine.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16073 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-24 20:28:52 +00:00
Axel Dörfler
d97476d155 The userland stack trace no longer accesses the stack of the crashed application unsafe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16071 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-24 17:22:50 +00:00
Jérôme Duval
e947a6d02f improbed tabbing
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16057 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-24 10:56:10 +00:00
Axel Dörfler
627e4043a8 Improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16042 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-23 11:41:07 +00:00
Axel Dörfler
7817211a38 Allow only root to look at other team's file descriptors.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15992 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-17 01:44:18 +00:00
Axel Dörfler
0e382a4667 Implemented a syscall to get information about the open file descriptors of all teams.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15991 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-17 01:29:18 +00:00
Axel Dörfler
ddb7d0b6a6 Implemented force unmounting - by passing the "-f" option to "unmount" you
can now safely unmount volumes that are still in use by some applications.
Minor fixes to the FD disconnection implementation:
* put_fd() checked the condition for being able to disconnect a descriptor
  incorrectly (causing the FD to never be disconnected).
* remove_fd() would hand out disconnected descriptors (but should have
  returned NULL for them).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15952 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-15 19:26:42 +00:00
Axel Dörfler
60e5ea42e0 Quick fix for a crashing bug I just introduced.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15951 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-15 18:30:07 +00:00
Axel Dörfler
128165101a Implemented disconnecting file descriptors: this will be used by the
force unmounting code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15949 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-15 17:11:48 +00:00
Marcus Overhagen
7c446ef048 In wait_for_thread allow userReturnCode to be NULL regardless whether NULL is a valid IS_USER_ADDRESS
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15946 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-15 13:26:18 +00:00
Ingo Weinhold
7afc16f059 * Fixed a bug regarding storing/restoring FPSCR in the interrupt
code. The stack pointer was not adjusted, hence we were
  overwriting the previous register value. But it looks like I
  missed to check in the arch_cpu.h with the iframe structure
  including the floating point registers anyway.
* Backported the ELF PPC relocation code from the boot loader to
  the kernel.
* Fixed the PPC version of arch_thread_switch_kstack_and_call().
  Apparently the signature had changed, but the assembly
  implementation was not adjusted accordingly.
* sc prints more registers now (LR, CR, CTR, XER,...).
* Fixed several occurences of not-working fault handlers.
  Apparently the compiler realized, that the "error" label was
  never jumped to (by the code it knew), and optimized the
  respective code away. Now we use a trick to make it think the
  error label might actually be jumped to. I wonder whether the
  x86 version has the same problem when being compiled with GCC4.
* Adopted the x86 page fault handling interrupt code.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15933 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-13 00:49:13 +00:00
Ingo Weinhold
71848dd62f arch_elf.c -> arch_elf.cpp
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 14:26:15 +00:00
Ingo Weinhold
b33f1804ea Faster/shorter way of aligning something.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15909 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 14:14:50 +00:00
Ingo Weinhold
b7ba8a182f We enable the FPU now, store the non-volatile FPU registers on
context switches and all FPU registers in an iframe. We might want
to rethink this, though.
The kernel initialization runs to the end now. No boot volume is
found yet, but that is expected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15908 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 13:51:38 +00:00
Ingo Weinhold
9b6eaae234 * Fixed thread support. The entry and exist functions are now called,
too -- introduced a function ppc_kernel_thread_root() which calls the
  three functions (entry, start, exit) in sequence. This brings us well
  into the second part of the kernel initialization.
* Replaced stmw/lmw in ppc_context_switch() by individual stwu/lwzu
  sequences. The former ones are documented to perform suboptimal on
  some architecture implementations.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 02:17:29 +00:00
Ingo Weinhold
31ac264b1e Added TODO regarding the use of arch_cpu_global_TLB_invalidate().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 02:05:29 +00:00
Ingo Weinhold
d0648592ca It appears I misjudged the availability of the "tlbia" instruction. Put
the previous implementation of arch_cpu_global_TLB_invalidate() back in
place (as fallback).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-11 01:31:15 +00:00
Ingo Weinhold
6c678c57c7 * The exception vector offset is now also part of the iframe.
* Cloned iframe stack management from x86.
* Reimplemented arch_thread_{get,set}_current_thread(). The
  thread structure is stored in SPRG2. It is set to NULL in
  arch_cpu_preboot_init(), now. A non-null current thread
  causes all kinds of undesired behavior in early boot code.
* We establish the address space mappings we know from the
  Open Firmware as areas. At least those in kernel address
  space. The ones in userland address space are tougher.
  Fortunately on my Mac mini there aren't any save the
  boot_loader stack, which is not needed any longer anyway.
* Added stack trace support to the kernel debugger. Mostly
  cloned and adjusted the x86 code. Some bits are still
  missing, like stack traces for other threads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15890 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-10 03:00:33 +00:00
Ingo Weinhold
1777154c14 * Fixed tracing build.
* In reserve_boot_loader_ranges() we skip ranges that lie without
  the kernel address space (we failed and panic()ed before). The
  architecture specific code has to deal with those, if they are
  of any importance.
* sAvailableMemoryLock.sem was not set to -1 in vm_init() so code
  executed after semaphores were available but before the semaphore
  was created caused semaphore 0 to be acquired.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-10 02:22:24 +00:00
Ingo Weinhold
e2f7a6d61f Missed that one.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15883 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:42:39 +00:00
Ingo Weinhold
48fe700d70 arch_debug.c -> arch_debug.cpp
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15882 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:38:09 +00:00
Ingo Weinhold
7176dd57e5 Reworked the exception handling code. The former one ran into the
void after turning off BAT for the segment containing itself.
The monster macro for the exception vector code was not really
elegant besides being too long for the 32 byte performance
monitor exception slot. Furthermore wasting three of the SPRG*
registers as cheap scratch memory wasn't that nice either.

We now have a three-step approach: The exception vectors
themselves contain only five instructions which branch to common
code at the beginning of the same physical page. That one sets
up BAT for itself, turns address translation back on and jumps
into the kernel. There we turn off BAT again, dump an iframe,
and enter the actual exception handler (/dispatcher). Upon return
the registers are restored from the iframe and we get back to the
place where the exception occurred.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15881 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-09 03:30:52 +00:00
Ingo Weinhold
a06cbf3fc2 arch_int.c -> arch_int.cpp.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15876 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-08 17:14:26 +00:00
Axel Dörfler
8c7229ddbe Fixed some GCC4 only warnings
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-08 12:39:06 +00:00
Ingo Weinhold
262e0a636b We use the same strategy for computing the system time as on x86 now.
The time base conversion factor is the 32 bit value
  2^32 * 1000000 / time base frequency,
so the system time can be computed by
  system time = time base * conversion factor / 2^32.
The expression in system_time() looks more complicated now, but is
actually much faster (factor 2.5 on my Mac mini). I'm positively
surprised, how good the assembly looks, that GCC 4 generates. There's
not that much potential for optimization by hand-coding the function.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15863 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 23:05:56 +00:00
Ingo Weinhold
8baf8813c0 Added "shutdown" debugger command. Implemented arch_cpu_shutdown() for
PPC.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 22:49:43 +00:00
Ingo Weinhold
85af525e59 * Added missing call to __ppc_setup_system_time(). system_time()
and real_time_clock[_usecs]() finally seem to work (at least in
  the kernel).
* Removed accidentially committed debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15861 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 20:35:13 +00:00
Ingo Weinhold
67ea83c566 We use the generic physical page mapper for PPC now. I realized that it
is actually not that nice for PPC since we don't have large pages.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15860 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 20:32:32 +00:00
Ingo Weinhold
3b36b30fef * Made vm_alloc_virtual_from_kernel_args() available to other kernel
parts, too. Fixed a potential overflow.
* The generic physical page mapper reserves the virtual address range
  for the IO space now, so that noone can interfere until an area has
  been created. The location of the IO space is no longer fixed; it
  didn't look to me like it was necessary for x86, and we definitely
  need to be flexible for PPC.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 17:37:21 +00:00
Ingo Weinhold
a71974c1f8 Pulled the algorithm for dynamically mapping physical pages into an
"IO space" out of the x86 specific source into arch/generic. We'll use
it for PPC as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15853 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-07 03:13:42 +00:00
Stefano Ceccherini
a041f6e8f6 Fixed a couple problems in the time keeping mechanism, which got broken lately. Done in tandem with Korli
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15846 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-05 16:03:22 +00:00
Ingo Weinhold
e55e1a0e66 Implemented the PPC specific RTC support. We search for an "rtc"
device in the Open Firmware implementation of boot loader and
pass its path to the kernel, where it's opened and used for
getting/setting the real time. The expensive atomic_*64() on PPC
32-bit make things a bit more complicated. Moreover, missing
64 bit multiplication and division instructions won't really
allow system_time() to be anywhere near as fast as on x86. :-/


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15837 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-04 04:55:04 +00:00
Ingo Weinhold
09bb4e9ac5 The real_time_data structure contains an architecture specific
substructure now (that's the only member actually). The system time
offset is therefore accessed via architecture specific accessor
functions.
Note, that this commit breaks the PPC build. Since I want to rename at
least one file I've already changed, I can't avoid that.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15835 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-04 02:17:59 +00:00
Ingo Weinhold
d9a5e6050f Pulled the conversion between seconds since the epoche and the split up
(year, month,...) representation out of the x86 specific code and put
respective support functions into real_time_clock.c. We'll need those
for the PPC specific part too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15827 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 17:26:37 +00:00
Ingo Weinhold
27ceaeaccc Renamed arch_real_time_clock.c to arch_real_time_clock.cpp in
anticipation of the things to come. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15825 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 16:34:41 +00:00
Ingo Weinhold
7afa713acb Reorganized the boot platform dependencies in the kernel a bit.
Basically the architecture specific code is now responsible to
init and make use of the platform specific code, now. The reason
being that we have only one kernel per platform and thus cannot
decide at compile time, which platform to use (if any).
The PPC implementation features an abstract base class PPCPlatform
(implemented for all supported platforms) through which platform
support is provided.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15824 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 16:26:39 +00:00
Ingo Weinhold
716a16ce61 * Find out a few interesting information about the system (like CPU,
bus, and time base frequency) in the PPC boot loader, and propagate
  them to the kernel via kernel_args.
* Now we use the correct time base frequency for timer calculations.
* Implemented PPC specific system info stuff. Added a few PPC CPU
  types to <OS.h>.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15817 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-03 13:30:23 +00:00
Axel Dörfler
37675ea580 Deleted ranges were never removed from the ranges hash... this could have finally
nailed down bug #77.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15791 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 13:09:42 +00:00
Ingo Weinhold
c8cd524c67 * Refactored arch_vm_translation_map_init_post_area() a bit: Pulled out
remapping stuff into separate functions and made them available to
  others.
* Remap the exception handler space in arch_int_init_post_vm() into the
  kernel address space (same issue as with the page table).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15783 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 03:30:58 +00:00
Ingo Weinhold
835fb10b16 Added of_exit and of_enter KDL commands.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15782 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-02 02:30:31 +00:00
Ingo Weinhold
10a83ac31f * Added tlbia() and tlbie() macros. Replaced ptesync() by ppc_sync();
the fact that I couldn't find ptesync in an otherwise more complete
  documentation I downloaded yesterday made me suspicious.
* arch_cpu_global_TLB_invalidate() uses tlbia now. The instruction is
  optional, but so is tlbie (how I understood it is that both exist,
  when the architecture implementation has a TLB). And the former loop
  looked just scary.
* Implemented arch_cpu_user_TLB_invalidate(). It does just the same as
  arch_cpu_global_TLB_invalidate().
* Some changes with respect to synchronization required on page table
  and segment register updates.
* Some more minor renaming. Pulled a new function
  remove_page_table_entry() out of unmap_tmap().
* In arch_vm_translation_map_init_post_area() we do now remap the page
  table into the kernel address space, if it was without before. The
  page table might actually be a good application for BAT, though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15773 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 21:40:27 +00:00
Ingo Weinhold
b019d8c5f3 * Renamed the static variables according to Haiku conventions.
* Renamed occurrences of ASID/asid to VSID/vsid where appropriate.
* vm_translation_map_arch_info::vsid_base is now the first usable
  VSID and doesn't need to be shifted anymore.
* Changed the VSID base shift from 4 to 3, since we need only 8 VSIDs
  per team.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15772 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 16:15:04 +00:00
Ingo Weinhold
8761241015 * Fixed calculation of num_pages. It came out one too small.
* Fixed several off-by-one comparisons with num_pages.
* vm_alloc_virtual_from_kernel_args() now makes sure the allocated
  region lies within the kernel address space (or is at least
  >= KERNEL_BASE).
* Simplified one or two patches.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15771 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 15:23:31 +00:00
Ingo Weinhold
5b35f4211e Implemented arch_debug_serial_getchar(), so we can even type something in
KDL. :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15770 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 15:09:11 +00:00
Ingo Weinhold
b9b301b6c8 * Replace the arch_cpu_global_TLB_invalidate() sledge hammer in
fill_page_table_entry() by a ptesync(). Mapping the kernel heap
  took about 2 minutes here before.
* Added missing shift of the asid_base in ppc_translation_map_change_asid().
* Commented out the BAT stuff in arch_vm_translation_map_init_post_area().
  Besides that I think it won't work that way, it made the page table
  unaccessible; though I'm not sure why.
* Added a bit of documentation to the beginning of the file. Should give
  enough information to understand what happens here without further
  detailed knowledge about the architecture.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15769 a95241bf-73f2-0310-859d-f6bbb57e9c96
2006-01-01 15:07:53 +00:00
Axel Dörfler
e075b5a32e Added some debug helper. Hopefully they give more insight to Stephan's problem (bug #77/#78).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15767 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-31 14:31:31 +00:00
Ingo Weinhold
957a1b17eb * Introduced new build system variables
{HAIKU,HOST,TARGET}_KERNEL_PIC_{CC,LINK}FLAGS which define the
  compiler/linker flags specifying the kind of position independence
  the kernel shall have. For x86 we had and still have -fno-pic, but the
  PPC kernel has -fPIE (position independent executable) now, as we
  need to relocate it.
* The boot loader relocates the kernel now. Mostly copied the relocation
  code from the kernel ELF loader. Almost completely rewrote the PPC
  specific relocation code, though. It's more correct and more complete now
  (some things are still missing though).
* Added boot platform awareness to the kernel. Moved the generic
  Open Firmware code (openfirmware.c/h) from the boot loader to the kernel.
* The kernel PPC serial debug output is sent to the console for the time
  being.
* The PPC boot loader counts the CPUs now and allocates the kernel stacks
  (made OF device iteration a bit more flexible on the way -- the search
  can be restricted to subtree). Furthermore we really enter the kernel...
  (Yay! :-) ... and crash in the first dprintf() (in the atomic_set()
  called by acquire_spinlock()). kprintf() works, though.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15756 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 21:20:07 +00:00
Axel Dörfler
140dd51293 cache_abort_transaction() could let cached_block::parent_data have the same value
as cached_block::data - which led to a crash as block_cache::FreeBlock() tried to
free both later.
Since neither cached_block::parent_data nor cached_block::original are supposed
to be != NULL in block_cache::FreeBlock(), they are no longer freed, but the system
panics if one of them is not NULL.
This should fix bug #77.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 18:47:16 +00:00
Ingo Weinhold
7022600734 Don't know what kernel_args::bootdir_addr was originally intended for,
but it's not initialized anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-30 17:56:08 +00:00
Axel Dörfler
529bf1c6d7 block_range::Delete() did not remove the block_range from the free list,
and thus, it could be used again which led to a crash.
Changed the free ranges list from a singly linked list to a doubly linked
list so that not all free ranges have to be searched for the one to be
freed anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15696 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 16:40:05 +00:00
Axel Dörfler
3dcaf063c2 Cleaned up locking and fixed a related bug: put_cached_block() could have been called without holding the cache lock.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15695 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 16:24:09 +00:00
Axel Dörfler
c004406e92 * Fixed a stupid bug in vm_page_write_modified() I introduced recently: if pages having
the modified bit set were written back (that's the case when they weren't put into
  the modified pages queue yet), they were enqueued into the active queue twice, messing
  up the page lists with various effects - this little thing took me busy for the last
  few days :-/
* Improved the "page" debugger command: it now prints out much more info, and also lets
  you lookup pages via physical address.
* The dump commands are now using kprintf() instead of dprintf().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15692 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 13:29:25 +00:00
Ingo Weinhold
21796ee568 Added newly required functions arch_cpu_init_post_modules() and
arch_cpu_user_TLB_invalidate(). Empty at the moment; will have a look at
that later. The PPC kernel builds again, now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:19:44 +00:00
Ingo Weinhold
31cfffdff4 Added missing include.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15684 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:17:25 +00:00
Axel Dörfler
447308b363 Enabled on-screen KDL by default.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15681 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 20:49:28 +00:00
Axel Dörfler
6aeb59944d Fixed printing stack trace of crashed apps.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15680 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 11:28:03 +00:00
Axel Dörfler
032a2d2805 Added "bt" to print a stack crawl to get less confused by gdb :-)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15660 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-22 23:54:51 +00:00
Axel Dörfler
0c19920751 Improved debug output, added missing owner info to _dump_area().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15653 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-22 01:08:51 +00:00
Axel Dörfler
7a3e1b6979 Slightly improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15652 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-22 00:47:37 +00:00
Axel Dörfler
f31dc4dd08 Improved tabulator for the on screen KDL.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15651 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-22 00:43:21 +00:00
Axel Dörfler
ebe5949e61 The debugger command "areas" can now restrict the list by team ID.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15650 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-22 00:40:34 +00:00
Axel Dörfler
c1b5724035 My last commit broken vm_clone_area(): it didn't grab a reference to its
cache, and therefore, let the kernel crash easily.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15649 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-22 00:04:28 +00:00
Axel Dörfler
db39fa281e Moved the headers of the different store implementations into the VM source
directory; they are not used outside the VM.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15648 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 20:08:49 +00:00
Axel Dörfler
16cfe613cd Fixed vfs_lookup_vnode() - it's not called with the mutex already locked anymore.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15647 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 20:07:33 +00:00
Axel Dörfler
14e132e2bc Reactivated check for failed semaphore creation - after kernel startup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15644 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 17:58:49 +00:00
Axel Dörfler
a8a13a0ae5 During early boot, there are no semaphores - but vm_cache_ref are already created...
Must be further investigated (if the locks are created later or not...)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15643 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 17:47:50 +00:00
Axel Dörfler
1e12fe8e5d A vm_cache can no longer be created with a NULL vm_store (nobody did it before,
but it would have worked - and crashed soon after).
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 17:05:50 +00:00
Axel Dörfler
ea2cd27e57 * Fixed the strange vm_cache_ref reference count mechanism: now, a fresh
vm_cache_ref starts with a reference count of 1. When acquiring a vm_cache,
  you no longer need to worry if that should go through the vm_store, or not;
  as it now always does.
* map_backing_store() no longer needs to play with the vm_cache_ref
  references.
* that simplified some code.
* vfs_get_vnode_cache() now grabs a reference to the cache, if successful.
* better balanced vnode ownership on vnode_store creation (vnode_store
  released the vnode before if its creation failed).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15641 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 17:00:03 +00:00
Axel Dörfler
d5abe15e84 The name elf_load_user_image() chooses for the area is now actually limited
to B_OS_NAME_LENGTH bytes, instead of 64. Also, it will now only consider
the leaf name for the area.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15640 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 16:47:46 +00:00
Axel Dörfler
79f73dbc56 * vm_page::offset is now called cache_offset and is now an uint32 instead of off_t;
this saves 4 bytes per page. To compensate the loss of bytes, the offset is now
  stored in page size units, that's enough to address 2^44 or 16 TB (which is now
  the maximal supported file size!).
* Renamed vm_page::ppn to physical_page_number.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15637 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-21 12:38:31 +00:00
Axel Dörfler
d608540b67 Separated vm_address_space.h from vm.h.
Some more cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15614 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-20 15:54:45 +00:00
Axel Dörfler
4318316c65 This should fix PPC build after recent changes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15610 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-20 13:31:38 +00:00
Axel Dörfler
96e01a27bf * Merged vm_virtual_map with vm_address_space - there was no reason to have
them apart (this even saves a pointer from vm_virtual_map to its address space)
* aspace -> address_space
* vm_create_address_space() did not check if creating the semaphore succeeded
* Removed team::kaspace - was not really needed (introduced a new vm_kernel_address_space()
  function that doesn't grab a reference to the address space)
* Removed vm_address_space::name - it was just a copy of the team name, anyway,
  and there is always only one address space per team
* Removed aspace_id - the address space is now using the team_id
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15609 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-20 13:29:11 +00:00
Axel Dörfler
9d845483cf Got rid of two ToDo-items: instead of clearing the PAGE_MODIFIED flag after having
written the page, we now do it before, so that it cannot lose any changed data
anymore; it doesn't matter if the page is written to while writing it back, the
worst thing that can happen is that we write the same page twice. Also, we don't
rely on the PAGE_MODIFIED bit anymore, we now check all mappings of that page
to find all modified pages, no matter how far the (currently disabled) page
daemon had come.
Also, destroying an area will now result in writing back changed pages - this
is only really important for memory mapped files, though, and should probably
be avoided for other vm_store types.
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15597 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 23:01:11 +00:00
Axel Dörfler
89f5f72a15 * Added debug output to vm_low_memory.cpp.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15568 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 17:35:03 +00:00
Axel Dörfler
d0d37bdfd1 * vfs_init() is now called later in the startup sequence - since no core kernel
service depends on it, it doesn't make any sense to call it that early in the
  game.
* The VFS now has a low memory handler for vnodes as well. If there is enough
  memory left, it won't free any vnodes anymore.
* Potential crashing bug fix: some functions did not check if the FD passed
  in belonged to the right type; they just assumed it had a valid vnode, but
  it could have had a mount structure associated as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15566 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 16:11:36 +00:00
Axel Dörfler
4c0f46e2a3 The block_cache::LowMemoryHandler() must check if it could acquire the cache's lock;
it might have been deleted in the mean time.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15565 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 15:50:13 +00:00
Axel Dörfler
182f88dda1 * block_cache_delete() now deletes the cache with with its lock held.
* the link were not initialized in cached_block, as its constructor were never called
  (was using malloc/free instead of new/delete).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15564 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 15:45:00 +00:00
Axel Dörfler
005108a262 Forget to remove debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15563 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 14:33:10 +00:00
Axel Dörfler
37bd67edb8 Now also flushes dirty blocks correctly (cannot happen if transactions are used,
ie. never happens with BFS).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15562 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 13:53:34 +00:00
Axel Dörfler
41e866f3ae The block cache now registers and uses a low memory handler that will flush
unused blocks when needed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15561 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 13:49:23 +00:00
Axel Dörfler
7d7f4675bb * Added some cpuid eax == 1 feature definitions to arch_cpu.h
* Renamed IA32_MTR_WRITE_COMBINED to IA32_MTR_WRITE_COMBINING.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15559 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-16 12:25:49 +00:00
Axel Dörfler
ebdb9dfebf Blocks are now put into an unused list when they aren't used.
When memory gets low, the blocks on that list are also freed - but right now,
that only happens when a block is put back (not directly on demand, ie. via
a low memory handler).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15552 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-15 21:35:19 +00:00
Axel Dörfler
1534aa236c Added new function vm_low_memory_state() that returns the current low
memory status.
Added new B_NO_LOW_MEMORY constant for the usual case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15551 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-15 21:30:28 +00:00
Axel Dörfler
b3e26f5b8f Documented the block cache allocator a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15546 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-15 16:23:30 +00:00
Rudolf Cornelissen
09116ce3bc removed the switch statement for determining number of CPU's in a system. This should fix CPU 'hlt' instruction not being executed in SMP systems idle loop. Thanks Axel and Ingo for pointing me at this.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15544 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-15 12:25:11 +00:00
Axel Dörfler
e0e9a3e69f * We now support the global page feature of x86 processors that prevents
kernel TLBs from being flushed on context switch.
* new arch_cpu_user_TLB_invalidate() that now does what arch_cpu_global_TLB_invalidate()
  did before.
* arch_cpu_global_TLB_invalidate() will now flush all TLBs, even those from the
  kernel.
* some cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15535 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-14 17:07:37 +00:00
Axel Dörfler
51a3c450be The short story: we now have MTRR support on Intel and AMD CPUs (the latter
has not yet been tested, though - I'll do this after this commit):
* Removed the arch_memory_type stuff from vm_area; since there are only 8 memory
  ranges on x86, it's simply overkill. The MTRR code now remembers the area ID
  and finds the MTRR that way (it could also iterate over the existing MTRRs).
* Introduced some post_modules() init functions.
* If the other x86 CPUs out there don't differ a lot, MTRR functionality might
  be put back into the kernel.
* x86_write_msr() was broken, it wrote the 64 bit number with the 32 bit words
  switched - it took me some time (and lots of #GPs) to figure that one out.
* Removed the macro read_ebp() and introduced a function x86_read_ebp()
  (it's not really a time critical call).
* Followed the Intel docs on how to change MTRRs (symmetrically on all CPUs
  with caches turned off).
* Asking for memory types will automatically change the requested length to
  a power of two - note that BeOS seems to behave in the same, although that's
  not really very clean.
* fixed MTRRs are ignored for now - we should make sure at least, though,
  that they are identical on all CPUs (or turn them off, even though I'd
  prefer the BIOS stuff to be uncacheable, which we don't enforce yet, though).



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15528 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-13 16:34:29 +00:00
Axel Dörfler
2ed21b8525 Some work in progress of the MTRR support. Shouldn't do any harm yet :-)
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15525 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-13 00:06:52 +00:00
Axel Dörfler
b7e7814c79 Prints a warning if open_modules_list() or get_next_loaded_module_name() are
called before module_init(). Maybe it's even better to drop into the kernel
debugger.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15524 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-13 00:01:19 +00:00
Axel Dörfler
97ec781e94 Added (empty) memory type functions to the PPC port.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15521 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-12 17:13:15 +00:00
Axel Dörfler
7c0a93573b Preparation for MTRR support, code is completely untested, though.
The CPU specific MTRR code will be in modules.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15520 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-12 17:04:36 +00:00
Axel Dörfler
381d6b57f6 Make sure system can continue after panic.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15519 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-12 17:00:46 +00:00
Axel Dörfler
b53cc465d6 Moved declaration of gBootDevice into its own header.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15518 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-12 16:06:33 +00:00
Axel Dörfler
aa9d29ba97 Another SMP oversight: the TSS was not explicetly loaded for all CPUs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15517 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-12 14:38:26 +00:00
Axel Dörfler
185a5a57cd Removed old PPC framebuffer console (this code is superseded by the on screen KDL). Updated files to match current arch API. This fixes the kernel build for PPC.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15411 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-08 11:03:24 +00:00
Axel Dörfler
82e9603fbf Disabled page daemon for now - it doesn't any good yet (but easily sucks up your CPU power).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15308 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-04 16:47:52 +00:00
Axel Dörfler
6aae81b3e1 Quick and dirty fix to allow our heap to allocate more than 64kB.
However, it will never free those allocations again.
This fixes the problems due to Rudolf's recent driver updates.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15248 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-30 19:28:46 +00:00
Ingo Weinhold
353d20c0c5 * libroot and the runtime loader are no longer built with kernel rules.
* New rule Ld, analogously to KernelLd.
* Added StaticLibrary parameter for supplying additional objects.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15191 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-27 13:31:50 +00:00
Ingo Weinhold
38f6264454 Reorganized building of kernel, boot loader, and libroot.
Each component is built in the respective subdirectory now
and no longer in src/system/Jamfile.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15184 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-27 00:27:19 +00:00
Axel Dörfler
2bea891d75 Debug output change: vm_page_fault() doesn't kill the team anymore, it just
sends a SIGSEGV signal (and lets the debugger handle the rest).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15145 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 12:43:14 +00:00
Axel Dörfler
ecf2e38db2 Reset last_acquirer in case the semaphore gets released.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15144 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 12:34:54 +00:00
Axel Dörfler
9240f51352 Fixed a major oversight in the interrupt handling: when a user space
application got interrupted, thread_at_kernel_exit() was called - but
that expected interrupts to be enabled for signal handling.
However, only exceptions 3 (breakpoint) and 99 (syscall) are trap
gates, and thus, only those actually had interrupt enabled at that
point.
If a KILL signal was pending when a hardware interrupt interrupted a
user space thread you were entering KDL before ("acquire_sem() called
with interrupts turned off").
Thanks to mouse interrupts I finally got this often enough to find
this...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15143 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-25 12:26:56 +00:00
Axel Dörfler
2b028fcaa0 Removed one TODO from the list: in case pages_io() fails, read_chunk_into_cache()
will no longer panic, but free its allocated pages.
I ran into this because BFS managed to create a file without data stream but
with a length larger than 0...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15093 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-23 18:36:38 +00:00
Ingo Weinhold
aeef8a1098 Reverted to the previous version. I was too quick; the boot loader
doesn't link against libsupc++ and still needs the symbol.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14972 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-16 20:51:17 +00:00
Ingo Weinhold
9b2e76121b No need to define __cxa_pure_virtual. We're linking against libsupc++ anyway.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14967 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-16 17:35:41 +00:00
Ingo Weinhold
6d865282d4 Link the kernel against libsupc++.a -- we're using RTTI after all. Added
missing symbols to kernel_cpp.cpp.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14965 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-16 17:25:54 +00:00
Ingo Weinhold
758b1d0e05 Fixes that make Haiku build with gcc 4. Mainly out of the following
categories:
* Missing includes (like <stdlib.h> and <string.h>).
* Linking against $(TARGET_LIBSTDC++) instead of libstdc++.r4.so.
* Local variables shadowing parameters.
* Default parameters in function definitions (as opposed to function
  declarations).
* All C++ stuff (nothrow, map, set, vector, min, max,...) must be imported
  explicitly from the std:: namespace now.
* "new (sometype)[...]" must read "new sometype[...]", even if sometype is
  something like "const char *".
* __FUNCTION__ is no longer a string literal (but a string expression), i.e.
  'printf(__FUNCTION__ ": ...\n")' is invalid code.
* A type cast results in a non-lvalue. E.g. "(char *)buffer += bytes"
  is an invalid expression.
* "friend class SomeClass" only works when SomeClass is known before.
  Otherwise the an inner class with that name is considered as friend.
  gcc 4 is much pickier about scopes.
* gcc 4 is generally stricter with respect to type conversions in C.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14878 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-12 23:27:14 +00:00
Axel Dörfler
04cd47db59 common_access() now follows the same logic as traversing paths: if the file system
doesn't export the fs_access() function, it assumes access is granted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14816 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-10 11:17:03 +00:00
Marcus Overhagen
9ae89b4535 bugfix
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14710 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-04 20:01:47 +00:00
Axel Dörfler
c5eb28a359 Now uses the new image_debug_lookup_user_symbol_address() call.
The stack frame that got interrupted were missing from the stack output
(and thus the call that got us into the kernel).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14706 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-04 17:28:08 +00:00
Axel Dörfler
4d18991268 Added a image_debug_lookup_user_symbol_address() that one day may find symbol names
in user images - right now, it only finds the image name and base address.
Fixed "images" debugger command - it actually acquired a mutex to dump the images...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14705 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-04 17:25:58 +00:00
Marcus Overhagen
378e08b775 improved debug output
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14704 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-04 17:10:50 +00:00
Axel Dörfler
7b7c38a2a7 The "where" or "sc" command now switches the page directory to the specified thread
to be able to follow the stack trace into userland.
No symbols there, yet, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-04 15:58:04 +00:00
Marcus Overhagen
164426a506 added a unreal kernel debugger command
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14670 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-03 21:03:51 +00:00
Marcus Overhagen
93d0c77a96 added debugging code, can be disabled, currently enabled
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14669 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-03 21:03:06 +00:00
Ingo Weinhold
571bb2b2a6 Simplified the x86 syscall interface a bit. We no longer pass a pointer
to the parameters nor the number of parameters; the kernel is able to
get both without problems.

The syscall functions in libroot (_kern_*()) are now self-contained
(they don't "jmp" to separate code anymore), which at least
theoretically allows gdb to print a stack trace with the syscall
function on the top when a thread is currently performing a syscall.
Practically it doesn't work yet, though, since those functions are
frameless (i.e. create no stack frame) which needs special support
I haven't implemented yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14661 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-03 14:36:46 +00:00
Ingo Weinhold
37a25a6ceb * Fail, if debug_thread() is invoked for the debug nub thread.
* To always be on the safe side, thread_hit_debug_event() now checks
  whether the thread is the debug nub thread.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14655 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-03 00:40:36 +00:00
Axel Dörfler
06be24a748 The spurious debug exception sometimes comes very often in QEMU - it's now only
printed when tracing is turned on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14634 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-02 12:41:44 +00:00
Axel Dörfler
2e8eec5722 Now also prints the parent's team ID as part of the team info.
No longer uses dprintf() in the kernel debugger.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14631 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-02 10:43:30 +00:00
Axel Dörfler
05a7818c85 Removed the "list all team" functionality from the debugger command "team", and
moved it into the new command "teams". Now also lists the parent team.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14630 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-02 10:38:28 +00:00
Axel Dörfler
dcdebb933e The debugger command "threads" now accepts an argument that let's you filter the
threads listed by team ID. Also, the thread's team is now printed in the list as
well.
Minor cleanup (renamed "t" to "thread" where appropriate).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14629 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-02 10:24:37 +00:00
Axel Dörfler
0e1358bd5c Applied a patch from Alexander Deynichenko: added missing signal definitions.
That also includes some XSI signals, SIGPOLL and SIGVTALRM, dunno if we will every support
those in a useful way.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14593 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-31 12:39:29 +00:00
Axel Dörfler
ce357f41f9 Removed "bootfs" and the support for it in other components.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14585 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-30 23:00:14 +00:00
Ingo Weinhold
338b8dc301 Merged changes from branch build_system_redesign at revision 14573.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-29 16:27:43 +00:00
Axel Dörfler
90ce9e8305 Added calls to read and write the MSR, the machine state register.
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14537 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-26 23:39:38 +00:00
Axel Dörfler
8fcd6b8e61 * renamed smp_boot.c to smp.cpp
* there is now a "Disable Hyper-Threading" safemode in the boot loader
* the SMP & HT menu items are now added in smp.cpp - and are only added
  if the system supports one of them.
* more cleanup to smp_apic.h
* removed cpuid() from the boot loader's support.S - instead, it will now
  use the one from the kernel.
* added a very weak HT detection: if the MP config only listed one CPU,
  and this CPU supports HT, we enable the other logic processor manually -
  as this currently doesn't work, it's disabled, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14536 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-26 22:57:13 +00:00
Axel Dörfler
3207006695 send_signal_etc() is now safe to be used on an SMP machine.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14523 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-25 20:18:29 +00:00
Axel Dörfler
ef7bac18bb Implemented call_all_cpus(), and get_cpuid() properly (tested only the latter, though).
The "data_ptr" parameter is now only freed if you specify SMP_MSG_FLAG_FREE_ARG
when sending the ICI message.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14519 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-25 18:18:11 +00:00
Axel Dörfler
6cd505cee7 Changed the boot procedure a bit.
Extracted scheduler_init() from start_scheduler() (which is now called scheduler_start()).
Moved scheduler related function prototypes from thread.h to the new scheduler.h.
Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14518 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-25 16:59:12 +00:00
Axel Dörfler
888248d42e The kernel now panics if it didn't found any possible boot partitions.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14506 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-24 22:12:41 +00:00
Marcus Overhagen
31b6023a85 Fixed an off-by-one error in the read_from_buffer function,
testcase: size=7, in=7, first=0, read length=7

Fixed an off-by-(buffer->size) error in the write_to_buffer function,
testcase: size=7, in=2, first=3, write length=3



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14473 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-22 21:43:54 +00:00
Axel Dörfler
3d5ecf962c Minor cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14472 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-22 16:53:49 +00:00
Axel Dörfler
9386f2e6a1 Missed a warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14466 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-21 14:04:17 +00:00
Axel Dörfler
8210eff8e8 Didn't compile with debug output turned on.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14465 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-21 14:02:17 +00:00
Axel Dörfler
a4c373515e When a team died, only the time of its children were added to its parent
dead children time counters - not its own time.
Moved time calculation to team_remove_team().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14464 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-21 00:15:17 +00:00
Axel Dörfler
7d9e0897ed Implemented sigsuspend() - not tested, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14459 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-20 18:09:50 +00:00
Axel Dörfler
e4d36dd1f4 Implemented sigpending().
Forgot to atomically get some thread_debug_info values.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14458 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-20 17:19:46 +00:00
Axel Dörfler
50374cbdca Changed the signal handling code so that handle_signals() can be called without
having the thread lock held and interrupts disabled.
Cleaned up the signal handling code, and fixed some minor bugs with blockable
vs. non-blockable signals.
thread_debug_info was using uint64 for signals sets instead of sigset_t.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14457 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-20 16:56:04 +00:00
Axel Dörfler
7121425eb5 Turns out we could remove a mount point...
Under BeOS remove_vnode() is failing in this case, which looks like a good idea to imitate.
Also, pipefs/rootfs didn't handle that case - they even removed the entry before calling
remove_vnode() - they now behave correctly. And also BFS now returns the actual error code
received from remove_vnode() instead of B_ERROR.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14456 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-20 16:34:18 +00:00
Axel Dörfler
1c88c851ad Turned off debug output again - also temporarily removed the file cache warning
about our block_io module not honouring the total length in read_pages().
Removed drops into the debugger when there is a block without an "original"
data buffer - that's completely normal and happens when someone asks for
a cleared block that is not yet in the cache.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14437 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-19 23:01:57 +00:00
Axel Dörfler
d7f0a6f215 If register_preloaded_module_image() fails, a warning is printed.
get_next_loaded_module_name() no longer prints anything if tracing is enabled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14436 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-19 22:45:13 +00:00
Axel Dörfler
ca7c5a9e13 Implemented cache_detach_sub_transaction() - not tested yet, though.
Added and implemented new functions cache_blocks_in_[sub_]transaction().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14431 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-19 16:46:17 +00:00
Axel Dörfler
94752292dd First go at an implementation of sub transactions - code is not yet tested, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14429 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-19 14:37:29 +00:00
Axel Dörfler
0fc0129604 Fixed another stupid bug in all readv()/writev() versions: the position of
the read/write access was only correct for the first entry in the iovec.
These functions should be updated to use read_pages()/write_pages() where
possible, anyway - right now, they only save some kernel calls, while they
could be processed by the device at once.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14413 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-18 19:51:47 +00:00
Axel Dörfler
28953e6c2b Fixed two stupid bugs in _kern_writev() and _kern_readv() - they accidently
tried to write from/read to the userland file descriptor instead of the one
of the kernel.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14412 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-18 19:11:07 +00:00
Axel Dörfler
3ea780cdf9 If booted from an image, the list of possible boot partitions is now ordered by
some heuristic: when you booted from a CD, CDs are preferred; else, volumes with
names like "Haiku" or "System" are preferred - if someone has better ideas, please
shout.
Note, this heuristic will only come into play if the boot loader was loaded from
an image (ie. floppy/CD/network), and you didn't choose any boot device.
Added evil methods to the Stack class that come in handy (you can now directly
access the array) for this.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14410 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-18 18:45:55 +00:00
Axel Dörfler
2db3fced5f Moved vfs_bootstrap_file_systems() and vfs_mount_boot_file_system() out of vfs.cpp
and into its own file vfs_boot.cpp.

Added basic support for booting from CD - it doesn't give CDs a higher priority,
so you could end up booting from HD when you didn't explicetly select "CD-ROM"
in the boot loader. Eventually, it should only boot from HD in this case, if
booting from CD failed (because of a missing boot partition or whatever).

fs_mount(), _kern_mount(), and _user_mount() will now return the dev_t of the
mounted device, and not just B_OK. Maybe we should have fs_unmount() work on
a dev_t instead of a path as well...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14403 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 14:01:04 +00:00
Axel Dörfler
76a377394e arch_debug_console_init() is called with args == NULL in case of an early
boot message - unfortunately, it crashed when used this way until now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14399 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 10:15:42 +00:00
Axel Dörfler
313ffb09da Improved debugging output a bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14379 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 11:20:42 +00:00
Axel Dörfler
9a63d90397 Added kernel private VFS functions vfs_entry_ref_to_vnode() and vfs_vnode_to_node_ref().
Minor cleanup of vfs.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14314 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 09:26:27 +00:00
Axel Dörfler
681779f1c8 Our close-on-exec flag handling was broken: it's supposed to be specified per slot, not
per file descriptor (a descriptor can be shared among several slots). There is now a
second table in the io_context structure that contains that information in a bitmap.
There are now two new (private) functions to control the close-on-exec flag, fd_close_on_exec(),
and fd_set_close_on_exec().
F_DUPFD, dup(), and dup2() are supposed to clear the close-on-exec flag on the duplicated
slot - this fixes bug #57 (no output after a redirect of a shell builtin).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14313 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 09:02:59 +00:00
Axel Dörfler
e90c3fec10 dup2() didn't close the evicted file descriptor (ie. call its close hook) - it just
removed it.
Added comment why there is an explicit dup2() at all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14312 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 08:55:19 +00:00
Axel Dörfler
1670b8f596 num_used_fds counting was broken for dup2() and vfs_new_io_context() when it was
used with a parent context.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14311 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 08:53:17 +00:00
Axel Dörfler
e8d4a05d8b Renamed the "iocontext" command to "io_context" to match the structure name.
It now also accepts a team ID and will then dump its io_context.
Accidently mixed used/max FD counter.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14310 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 08:47:03 +00:00
Axel Dörfler
9e3ebf4033 exit_thread() no longer sends a signal when it's called from a kernel thread - instead,
it will exit directly to have the same behaviour as in user space (where it doesn't
return to the caller, since signals are handled before returning to user space).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14309 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 08:43:10 +00:00
Axel Dörfler
8d3256a4ad The "thread" debugger command now also accepts an address for the thread structure.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14308 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 08:40:35 +00:00
Axel Dörfler
7dc1c65f2f Improved "team" debugger command: it will no longer crash on the kernel team, it
will no longer use vm_get_kernel_aspace() (which acquired a semaphore) and it now
accepts decimal team IDs as well.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14307 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-06 08:36:37 +00:00
Axel Dörfler
759a38d144 load_kernel_add_on() leaked FDs in case the image was already loaded.
And that was causing bug #50 (which is fixed now).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14305 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-05 16:41:04 +00:00
Axel Dörfler
333735e881 Added a new debugger command "iocontext" that prints out info about the kernel's
I/O context (or a specified one) including its FDs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14304 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-05 16:39:45 +00:00
Axel Dörfler
08da6fccdd Introduced a sane concept of ownership for the team_args structure: now load_image_etc()
and exec_team() have an additional "kernel" argument and will copy the arguments
themselves (or rather, delegate that to create_team_arg()).
When team_create_thread_start() is called, it will take over ownership and is
responsible for deleting it - this also fixed a memory leak in case the user
stack area couldn't be created.
Also changed comment after exit_thread(): since this call only delivers a signal, the
code after it will still get executed.
This fixes the crashing symptom of bug #50.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14303 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-05 15:32:48 +00:00
Axel Dörfler
f10cba9aec Changed get_mount() to return a status code instead of just the mount or NULL.
Some fields of fs_mount were not properly initialized when FS's mount function
was called, and therefore, could let get_mount() return a mount structure that
was not yet read for public consumption (this should fix bug #51).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14223 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-09-22 17:45:43 +00:00
Axel Dörfler
d86d4063b0 thread_create_thread_start() is a thread_func and therefore returns int32 not status_t
(that's what our headers say).
Some style fixes in signal.c.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14192 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-09-16 12:52:59 +00:00
Jérôme Duval
ab38c90461 added a libroot sigpending, kernel support isn't implemented
(fixed partly bug #49)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14181 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-09-13 16:12:20 +00:00
Jérôme Duval
3f84430938 added a trace and changed err type in team_create_thread_start()
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14180 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-09-13 15:44:30 +00:00
Jérôme Duval
96e6579454 added a libroot sigsuspend, kernel support isn't implemented
(fixed partly bug #48)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14129 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-09-08 12:26:16 +00:00
Axel Dörfler
47a54bea53 Rootfs now starts with 1 for the first inode ID.
Instead of -1, vnode_path_to_vnode() now returns the ID of the starting vnode when it
doesn't need to traverse the path at all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14081 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-28 20:08:32 +00:00
Axel Dörfler
b3373253a4 The generic syscall now returns more correct status codes.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-28 14:10:12 +00:00
Axel Dörfler
43ffbcc46e If a page fault happens from within the kernel debugger, vm_page_fault() is no
longer called - instead, it get its own mini page fault handler: if the thread
has a fault handler, that one will be executed.
Exiting the debugger (with the "continue" command) no longer causes the
vm_page_fault() routine to be called if interrupts were disabled.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14070 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-26 02:43:15 +00:00
Axel Dörfler
29cf7df355 kernel_debugger_loop() now memorizes the last sDebuggerOnCPU value, so that
the CPU value doesn't get lost when exiting a nested debugger.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14069 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-26 02:39:24 +00:00
Axel Dörfler
e432cef296 Updated a few more hash functions to be able to deal with negative numbers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14067 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-26 02:07:41 +00:00
Axel Dörfler
f26e4a1c98 Made hash functions able to deal with keys with negative numbers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14066 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-26 02:02:33 +00:00
Axel Dörfler
7b285866ff Fixed hash functions: when the key was lower than 0 (could happen with entry_refs
and node_refs passed in) they returned an invalid index (larger than range).
Fixed rootfs compilation with tracing turned on.
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14065 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-26 02:01:21 +00:00
Axel Dörfler
19dfa58852 add_wall() first added the memory block to the list, and then added the wall - there
was a race condition between that and the wall checker daemon (if enabled): it could
occasionally report an overwritten wall in that very moment.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14051 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-22 21:01:03 +00:00
Axel Dörfler
5793da1edc Renamed elf_lookup_symbol_address() to elf_debug_lookup_symbol_address() and
removed the locking it did, as that doesn't work anymore in the kernel debugger.
The function was not thought to be used outside the debugger, anyway.
Improved usage message from debugger command "ls".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14050 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-22 20:35:42 +00:00
Axel Dörfler
c2ee3ca134 Added a comment on how to deal with directly writable memory mapped files.
There, we need to detect the modified state from the mapping, too - the
vm_page state itself might not be up to date.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14049 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-22 20:33:19 +00:00
Axel Dörfler
4784eca19d cache_io() did not set the state of a page to PAGE_STATE_MODIFIED when it wrote
to it - if that page was read from disk unmodified before (or written back in
the mean time), the updated contents coult not be detected, and therefore, were
never written back.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14048 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-22 20:31:32 +00:00
Axel Dörfler
67a7102658 Fixed a pretty fatal bug in the page fault handling: interrupts were enabled
even if "kernel_startup" was "true". Page faults are now no longer allowed
during kernel startup (and could be easily avoided). The only situation where
we accept page faults with interrupts turned off now is during a kernel debugger
session.
Added a command debug_debugger_running() to test for that situation.
kernel_debugger() no longer sets kernel_startup while it's running; there should
be no situation when this could be helpful.
Interrupts are no longer enabled when a page fault happens in the kernel
debugger.
This potentially fixes all sorts of problems, and not only in the kernel debugger,
it could also have affected SMP (will test later).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14045 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 23:27:51 +00:00
Axel Dörfler
8a4462f51c Turned off debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14044 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 23:19:39 +00:00
Axel Dörfler
96643545c5 Removed unnecessary and stupid code - the doubled chain allocation also caused
a page fault during startup, because the chain memory is B_NO_LOCK.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14043 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 23:18:43 +00:00
Axel Dörfler
099ceb8f9d map_physical_memory() and its backend vm_map_physical_memory() did not map in the
pages, ie. they considered the areas to be B_LAZY_LOCK. But that doesn't really make
sense and potentially cause page faults where you wouldn't expect them (and where
it's not a good idea to trigger them).
Reworked display_mem() (used by the dw/db/ds commands in the kernel debugger) to
be a bit more sane, improved formatting, and allows it to work on non-existing
memory without a panic.
The "area" debugger command now also accepts an address (contained by the area)
as argument - and it will now always print out an error message if no matching
area could be found.
Replaced all dprintf() calls to kprintf() calls for the kernel debugger functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14042 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 23:17:09 +00:00
Axel Dörfler
72a263b6cf Make sure only ASCII characters are rendered.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14039 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 15:09:43 +00:00
Axel Dörfler
e0481f928e Now marks a partition unmounted on unmount - that allows a volume to be remounted as often as you like.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14036 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 13:45:15 +00:00
Axel Dörfler
23e13b2e9b The number of semaphores available is now computed based on the amount of memory.
Just like on BeOS, the overall maximum is 65536 semaphores for now - the mechanism
tends to make more semaphores available than the one under BeOS, though (which is
intended).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14035 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 12:20:43 +00:00
Axel Dörfler
30616a3243 block_cache::Free() now accepts NULL pointers (it was already used this way before...).
Unmounting BFS volumes should now work as expected.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14034 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 11:57:36 +00:00
Axel Dörfler
5b14757a30 We now have a consistent scheme what the file system should do with its root
node: like in BeOS, it *must* own the root node (ie. via publish_vnode()),
unlike in BeOS, it must also drop that reference on unmount (symmetrical
behaviour definitely makes more sense to me than the Be way).
Since all existing file systems for Haiku behaved differently, I brought them
in line (only pipefs already adhered to that new standard for some reason,
rootfs did only released the node, devfs did nothing - despite it's probably
not really useful to be able to unmount them).
fs_mount() will now panic if a file system does not do this correctly (useful
for file system developing).
Unmounting is now theoretically working again: when trying to unmount a BFS
volume, the kernel crashes in the block cache destruction... (but that's work
for tomorrow).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14017 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-21 00:41:16 +00:00
Axel Dörfler
e6b682541e Fixed a stupid bug in the recently updated write_chunk_to_cache(): lastPageOffset
was incorrectly calculated, and could therefore cause all sorts of troubles with
writes over 4 kB.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14011 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 23:22:13 +00:00
Axel Dörfler
99e1c71ee6 - fixed a locking bug in the file cache: get_file_map() could been called with either
only a read lock on the inode, or without a lock at all (in case of prefetching) - it
  is now using the cache_ref's lock to make sure it's retrieved only once and doesn't
  waste/corrupts any memory.
- since that fix made it mandatory to fix write_chunk_into_cache() to not call pages_io()
  while holding the cache_ref's lock (was a to-do item before), I changed it to make
  that possible.
- It now also supports write-through caches in theory - as there is no way yet to tell
  a cache to work this way.
- Optimized for the not so uncommon case of writing the last part of a file that is not
  a multiple of the page size - it won't call pages_io() anymore then, but zero the rest
  of the page directly.
- vm_page_write_modified() is now calling write_page() without holding the cache_ref's
  lock as well.
The updated write_chunk_to_cache() is not so well tested, though, but appears to work
so far.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14006 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 21:32:31 +00:00
Axel Dörfler
07810890b5 Entering an empty line to the debugger will no longer match the first best command
available.
Broken escape sequences are now properly ignored (read one character too much before).
Since the current line buffer is part of the history, we now delete that buffer when
crossing the current line again while traversing the history (restoring the former
buffer would be the nicest way, but that would require another empty buffer and more
copying).
Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14005 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 21:24:13 +00:00
Axel Dörfler
70c3e1a42c The escape sequence for erasing lines is now also supported (it's used by KDL command history).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14001 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 20:55:02 +00:00
Axel Dörfler
ed73e0eefa arch_debug_blue_screen_getchar() can now also return escape sequences for cursor
movement - IOW, the history of kernel debugger calls is now working also from
the on-screen KDL.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14000 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 20:53:44 +00:00
Axel Dörfler
a10cd10b2b Fixed a hypothetical bug: switch_sem_etc() was using thread_get_current_thread()
in an error message without checking for a NULL pointer (which happens during
early boot, and even though it would be impossible to get there at that time,
it shouldn't be accidently copied to anywhere else this way).
Added a compile time option to monitor the last thread that successfully
acquired a semaphore (disabled, though, only enable it when needed).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13998 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 20:13:05 +00:00
Axel Dörfler
61aceefd6e The debugger command "waiting" now also accepts a semaphore as argument (specified by ID),
and will only list those threads waiting for that one if used that way.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13996 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-20 15:57:56 +00:00
Axel Dörfler
d6c32d2bf3 The debugger's "sc"/"where" command now accepts a thread ID as parameter (and
then shows the stack crawl of that stack instead of the current one).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13984 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-19 12:53:58 +00:00
Axel Dörfler
c987e126de Testing against IS_KERNEL_ADDRESS() is more correct.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13983 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-19 12:52:19 +00:00
Axel Dörfler
851028d043 Fixed a warning I accidently introduced with the last change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13978 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-18 23:33:54 +00:00
Axel Dörfler
cd661dfcf8 Now dumps all semaphores matching the name you are searching for, not only the first one.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13974 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-18 15:13:03 +00:00
Axel Dörfler
f79ba0f9ba Now always prints out a message if the searched sem could not be found, and not
only under certain conditions.
Now also accepts decimal numbers as IDs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13973 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-18 15:11:18 +00:00
Axel Dörfler
e5c0e4a655 Now prints an error if no thread matching the requested criteria could be found.
Simplified parsing the ID (no need to differentiate between hex and decimal, if
we do both anyway).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13972 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-18 15:09:30 +00:00
Axel Dörfler
e8e4accd16 Add some useful debugger commands to the VFS layer for dumping a vnode, an fs_mount, and
the mounts/vnodes list.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13971 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-18 15:07:38 +00:00
Axel Dörfler
5913a657df Added two possible "ToDo" comments.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13970 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-18 12:41:18 +00:00
Axel Dörfler
b96ea69c37 You really can do the same mistake twice, even in two subsequent lines of code...
get_file_map() now seems to work correctly in all regular cases.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13947 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-13 12:37:13 +00:00
Axel Dörfler
4430d71191 Better error checking (at least panic if something goes wrong, instead of ignoring).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13942 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-12 19:51:17 +00:00
Axel Dörfler
139353cf1a Fixed two bugs in the new file extent caching code:
- under certain situations, the wrong extent could be chosen (off-by-one error)
- the resulting length of the first vector was incorrectly calculated for all
  extents but the first
Improved error checking a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13941 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-12 19:50:42 +00:00
Axel Dörfler
7964c56d67 Added vfs_get_cwd() call to get the mount_id and vnode_id of the current
working directory (instead of the full path).
Cleanup of some remaining "int" status variables (where it should have
been a "status_t").


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13924 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-09 16:25:01 +00:00
Axel Dörfler
8733b7318d The stack trace in the kernel debugger is now safe against accessing invalid
user memory (it got its own fault handler). IOW the stack frame is not changed
in that case anymore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13921 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-09 16:09:26 +00:00
Axel Dörfler
eab435cd59 vfs_get_vnode_cache() now only allocates a new cache if requested: this
prevents the system to allocate caches for files that don't use or have
a file cache (ie. only those can be mmap()ed!).
Therefore, cache_prefetch() no longer crashes when trying to prefetch
files without a file cache.
read_into_cache() no longer does anything if the requested size is 0.
Fixed a bug in cache_prefetch_vnode(): if the cache couldn't be retrieved,
it put the vnode, but didn't own it (the caller does).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13904 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-05 11:52:22 +00:00
Axel Dörfler
06ae92cd04 Maybe it's better to free the team resources after notifying the watchers;
since the hooks are called in the context of the team.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-05 10:27:08 +00:00
Ingo Weinhold
7d11acca6d Spotted by Axel: If the caller of a load_image_etc() was waiting for the new team to be loaded, but the team died before finishing loading we were notifying the caller only in case the team had already more than one thread.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13900 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-04 22:45:04 +00:00
Axel Dörfler
67f207164b Copied some code from the console driver: we now understand cursor movements,
and even color changes :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13898 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-04 14:55:11 +00:00
Axel Dörfler
95839f5c92 The file cache now has another init method that is called after the boot
device becomes available.
Currently, it opens the "launch_speedup" module (if available), later it
should consult a settings file for what to do.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13894 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-03 17:25:03 +00:00
Axel Dörfler
0d299e8a4b The team watching mechanism now works as intended.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13892 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-03 16:57:40 +00:00
Axel Dörfler
5159717538 team_delete_team() should have called delete_team_struct() instead of just
freeing the team - it leaked dead children semaphores and death entries;
waiting for a specific team could not have worked before.
Fixed delete_team_struct(), it did not correctly free the death list (would
have accessed freed memory).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13890 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-03 12:42:01 +00:00
Axel Dörfler
99c566f6c9 Added a team watching mechanism in the kernel, not yet tested (but at least doesn't cause any harm yet :-)).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13888 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-03 12:00:42 +00:00
Axel Dörfler
3798d46911 Calmed down start up a tiny bit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13885 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-02 16:43:30 +00:00
Axel Dörfler
8fef8adb6e Replaced all dprintf() calls from the kernel debugger with kprintf() calls.
(there might be some more left, but it's not urgent or fatal)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13884 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-02 16:28:20 +00:00
Axel Dörfler
8b45467cd0 Added debug commands "ready", "running", and "waiting" that only list those
threads which are doing said thing.
Replaced all dprintf() calls from the kernel debugger with kprintf() calls.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13883 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-02 16:27:00 +00:00
Axel Dörfler
ed65cbe349 The kernel debugger no longer uses dprintf() but kprintf() when printing
(dprintf() locks using acquire_spinlock() which can itself drop into the
kernel debugger, causing an endless loop (until the stack was full).
Removed debug_putchar().
The gdb interface is now calling arch_debug_serial_*() directly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13882 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-02 16:25:27 +00:00
Axel Dörfler
0a51327f98 Fixed on-screen KDL keyboard input routine: it now works much more reliable
and ignores keyboard input. Also, it now uses the definitions from the PS/2
HID driver (from ps2.h).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13881 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-02 16:19:36 +00:00
Axel Dörfler
c50cfe23dd Fixed crashing bug in remove_vnode(): it freed the vnode, but it didn't
remove it from the hash, and thus, left a dead pointer around.
free_vnode() does now also remove the vnode from the hash - this is done
so that the file system is notified about removal/put of the vnode before
there is a chance that this vnode is recreated/reloaded (could make the
life of file system writers a bit easier).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13877 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-02 11:20:04 +00:00
Axel Dörfler
11a3346caa The file extent map is now cached as well. Code is not optimal yet, and almost not
tested for fragmented files - but it seems to work good enough for now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13870 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-01 22:34:02 +00:00
Axel Dörfler
b72cf2601f Renamed vfs_vnode_acquire_ref() to vnode_acquire_vnode().
Removed vfs_vnode_release_ref(), as vfs_put_vnode() already does the same thing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13867 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-01 14:32:23 +00:00
Axel Dörfler
186857529e cache_prefetch() now comes in two flavours: one with a direct vnode pointer,
the other one with usual device/inode ID pair.
Both versions now accept an offset/size pair to specify the region of the
file to be prefetched - this may be turned into a file_vec_io array later on.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13866 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-01 14:24:58 +00:00
Axel Dörfler
b7d8ef5a0d The term vnode_ptr is not used anywhere else; renamed vfs_put_vnode_ptr() to vfs_put_vnode().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-01 14:17:41 +00:00
Axel Dörfler
9882caaadd The path resolving functions can now also fill in the ID of the parent directory.
This is currently only used for the file cache module API.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13862 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-08-01 12:44:59 +00:00
Ingo Weinhold
d35f0da76d Aesthetical change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13854 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-29 13:15:39 +00:00
Philippe Houdoin
685645f9bc USER == ! _KERNEL_MODE, right (!?).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13845 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-28 23:25:41 +00:00
Axel Dörfler
da1f176a9a You can no longer write to O_RDONLY streams, and you can no longer read from O_WRONLY streams (thanks to Ingo for this hint).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13800 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-22 06:54:19 +00:00
Ingo Weinhold
d08379a80b * Now we deal with all x86 exceptions, i.e. we no longer panic() when a
user application performs a division by zero or causes a general
  protection fault. For some exceptions (e.g. machine check) I wasn't
  quite sure whether they can be caused by user apps at all, so we panic()
  in those cases. Wouldn't harm, if someone more knowledgable would check
  this, though.
* Removed the unused fault handling stuff, respectively moved the little
  that was used into x86/arch_int.c.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13795 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-21 23:47:08 +00:00
Axel Dörfler
f4a8c33b5c Fixed a bug in put_death_stack_and_reschedule(): release_sem_etc() was called
with the thread lock held, which might have caused a panic later on, if there
was another thread waiting for the death stack semaphore.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13769 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-19 18:10:12 +00:00
Axel Dörfler
230a037ed4 Fixed a bad bug in vm_copy_on_write_area(): the area's cache offset was not taken
into account when remapping the pages read-only; it could have overwritten valid
page mappings this way. This was also the reason for the Terminal to crash - it
does now work as it should, although some keys don't work (like tab completion)).
vm_copy_area() no longer always sets B_KERNEL_WRITE_AREA if no kernel protection
was specified, but mirrors the userland protection (for example, the x86 MMU is
not able to have a page writable in kernel but not in userland). This caused
some areas to be read/write when read-only would have been enough.
vm_copy_area() now panics when vm_copy_on_write_area() fails - that's of course
no real solution, but it's bettern than letting it silently fail.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13768 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-19 18:00:31 +00:00
Axel Dörfler
a00d33c094 No longer reboots when a shutdown was requested - this gives the registrar
the opportunity to show the "System is now ready to reboot" alert.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13714 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-17 13:28:11 +00:00
Ingo Weinhold
aeaa4a21a4 It's considered rude to try killing the kernel team.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13705 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-16 23:38:07 +00:00
Ingo Weinhold
d3bdf71ea6 The debug nub port of a debugged team is owned by the debugger. Hence we
need to transfer the ownership, when handing over the team to another
debugger.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13696 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-16 21:04:22 +00:00
Ingo Weinhold
7f9c673981 * Introduced a new debugger message B_DEBUGGER_MESSAGE_HANDED_OVER, which
is sent to a debugger when the debugged team has been successfully handed
  over to another debugger.
* Fixed handling of B_DEBUG_MESSAGE_PREPARE_HANDOVER. We don't send a reply.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13683 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-15 12:18:33 +00:00
Axel Dörfler
31a5ff5d8e We now have a (private) writev_port_etc() call. This could be used to avoid
allocating a buffer and copying your data into it, when you have data to
send in several chunks (for example, this could be used by BMessage, as
suggested by Ingo Weinhold).
Code is untested, but should work.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13667 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-13 23:55:15 +00:00
Axel Dörfler
d7013609a8 Fixed a big memory leak: _user_writev() and _user_readv() allocated
a new iovec array, but only freed them on (early) error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13666 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-13 23:43:05 +00:00
Axel Dörfler
c9955bf00a Added new but empty function file_cache_invalidate_file_map().
This is needed in case the on-disk representation of a file changes (due to reorganization/defragmentation).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13660 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-13 16:33:05 +00:00
Axel Dörfler
54476a21b5 file_create() now also supports FD relative path specifications.
This was the cause for some apps to put their settings files to the current
directory, and also that Tracker did not find some icons (from the icons
it installed in the MIME database).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13645 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-12 16:33:10 +00:00
Axel Dörfler
0160c6fbda Fixed minor drawing problem of the on-screen KDL: in NO_CLEAN mode, the first two
lines would be left untouched instead of cleared before use.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13375 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-01 06:42:07 +00:00
Axel Dörfler
b7a96f02fd Now fills in system_info::cpu_infos[] (ie. CPU activity) by looking at the active
time of the idle thread. IOW Pulse now works :-)
Renamed the idle thread/stack to start with 1 instead of 0 (first idle thread will
be called "idle thread 1").
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13373 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-01 00:31:38 +00:00
Axel Dörfler
e970b839a0 Disabled B_USER_CLONEABLE_AREA for now - maybe this should be handled via kernel settings later.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13372 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-30 23:14:13 +00:00
Ingo Weinhold
07b6630b86 Made reading and writing memory overflow safe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13306 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-28 11:19:30 +00:00
Ingo Weinhold
047ab3f955 Be on the safe side when checking the size of data to be written to an area (overflow).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13299 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-28 00:35:28 +00:00
Axel Dörfler
229b2db028 cache_node_launched() is now called later, so that the environment will
be the same for both ways (via load_image() and exec*()).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13112 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-14 11:15:05 +00:00
Axel Dörfler
b84688be5f Added a basic low memory handler service.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13090 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-13 13:03:54 +00:00
Axel Dörfler
b1a248305b Minor cleanup, changed return type of page count functions (from addr_t to size_t,
as that's more correct).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13089 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-13 13:02:24 +00:00
Axel Dörfler
a69e0ac327 The boot item list was not initialized; this was no problem, though, as
no items can be removed from that list - nevertheless, it's wrong.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13088 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-13 13:01:13 +00:00
Axel Dörfler
ff9fb62471 Some cleanup (made static variables static).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13087 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-13 12:59:11 +00:00
Axel Dörfler
183dee22cb Unlike R5, receive_data() could return an error code under Haiku - this
can now only happen if the thread is killed.
_user_receive_data() will now longer pass B_CAN_INTERRUPT to receive_data(),
but B_KILL_CAN_INTERRUPT - this should fix the problem Stefano experienced
with this function, even if I couldn't reproduce it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13075 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-12 11:14:37 +00:00
Axel Dörfler
2a1492f0fa Moved the definition of the BlockAddressPool class into block_allocator.cpp, as it's
not used outside of it.
Added tracking for the last transaction in the block cache; that way it can test
if the last transaction has been closed before opening a new one.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13022 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-09 02:14:28 +00:00
Axel Dörfler
584d673049 Fixed various bugs in the block allocator: new free ranges were never added
to the free list, so a new range was started for every allocation (!).
block_range::Free() did not update the chunk's used_mask correctly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13021 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-09 02:09:06 +00:00
Axel Dörfler
78d6683c68 Changed the "help" command to be able to only show all commands starting with a certain string.
This helps to reduce the flood of commands for those blue screen "users" :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13018 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-08 17:16:40 +00:00
Axel Dörfler
68c1f3d2eb Disabled code that could find newly installed drivers - it's not likely we
will do that anytime soon, and it should be done by using node monitoring,
anyway.
devfs_open_dir() now makes sure the directory contents are up-to-date - this
should fix the app_server device lookup.
Disabled debug output in the read/write hooks to improve its usage.
Renamed part_map to partition.
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12935 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-03 00:51:17 +00:00
Axel Dörfler
80f6ef8bd8 Moved load_driver() and load_driver_symbols() over to devfs.
Added new devfs_add_driver() function that the device manager will now call
to register new drivers.
Devfs will now keep a list of known drivers and remembers, if they have
been initialized already - a driver can now safely scan the directory it's
in while being scanned itself without having its hooks called twice.
Devfs is now using a recursive lock instead of a mutex (that's not really
a requirement right now, but would allow us to keep the fs lock during
scanning).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12933 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-02 18:32:21 +00:00
Axel Dörfler
19b77242ac Some minor cleanup: removed unneeded includes, updated introducing comment.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12932 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-02 18:23:26 +00:00
Axel Dörfler
317121e102 Work in progress of the new block allocator for the block cache. It works, but
currently needs even more memory than the old one 8-)
Not cleaned up at all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12921 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-01 16:39:38 +00:00
Axel Dörfler
dde78a340e Fixed off by one error: could call memcpy() with '0' as size argument.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12910 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-31 01:17:25 +00:00
Axel Dörfler
d1407b9d2b The "PANIC" line will now also appear on the blue screen, not only over serial.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12909 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-30 23:09:36 +00:00
Axel Dörfler
f4e5c34143 cache_abort_transaction() freed the wrong block, and thus causing a file system
corruption even better than during its absence.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12903 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-30 16:54:08 +00:00
Axel Dörfler
c88974d026 The app_server now updates the kernel's blue screen frame buffer on mode changes
(only the accelerant HW interface does this for now).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12897 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 20:23:00 +00:00
Axel Dörfler
f33c8020e2 Removed debug/console.c, we no longer need it. frame_buffer_console_init() is now
called by debug_init_post_vm().
Since the availability of a blue screen specific getchar() is static anyway, there
is no need for the sBlueScreenGetChar variable (only the message "only serial input
available" gets lost, but since that is platform specific anyway...).
Hello blue screen! We now have an on-screen KDL, to be enabled by the kernel
setting "bluescreen", just like on BeOS.
The blue screen does not yet support any cursor actions or backspace, though (need
to grab some stuff from our console driver).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12896 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 16:23:00 +00:00
Axel Dörfler
395c6c62f2 Renamed arch/dbg_console.h to arch/debug_console.h.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12893 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 14:34:03 +00:00
Axel Dörfler
45c54054f7 No longer needs to include <arch/dbg_console.h>
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12892 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 13:33:30 +00:00
Axel Dörfler
2b8d85854d Renamed arch_dbg_console.c to arch_debug_console.c, dbg_console.h to debug_console.h.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12891 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 13:31:15 +00:00
Axel Dörfler
9a63135f7c Cleanup of the debug stuff, prepared for blue screen debugging.
kernel_debugger() didn't do enough before; panic() did all the work - but
since the former is a public function as well, I moved all the functionality
to it. Also fixed a possible buffer overrun in panic().
Renamed dbg_* to debug_*.
"serial_debug_port" setting did not ignore negative values.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12889 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 13:01:38 +00:00
Axel Dörfler
24b2daf33d Slightly improved debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12888 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 12:53:56 +00:00
Axel Dörfler
9620c1d716 rename_thread() was broken for the current thread: updating the name is
hardly atomic, so we need to grab the thread lock after all.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12877 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 00:29:45 +00:00
Axel Dörfler
d9152a2dfe We now accept NULL as a thread name (in which case it will get a default name).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12875 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 00:20:18 +00:00
Axel Dörfler
1d2f53e0ba Disabled debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12874 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-29 00:17:02 +00:00
Axel Dörfler
b3ef4fb41a Oops, forgot to implement cache_abort_transaction(); every failing transaction
could have destroyed the BFS integrity... (just happened to me, that's how I
noticed it)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12867 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-28 15:11:18 +00:00
Axel Dörfler
140e3bb026 Instead of the ugly and unnecessary cookie union, we now have a cookie for
opened devices, and one for opened directories.
Also adds and removes those directory cookies correctly now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12855 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-27 00:43:01 +00:00
Axel Dörfler
b716c3307f Removing the cookie must be locked as well, of course.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12854 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-27 00:41:00 +00:00
Axel Dörfler
0f04de87a7 The directory cookies of open directories are now correctly maintained and
removed when no longer used (the same bug is still present in devfs, btw,
and can potentially cause crashes).
Cleanup of the cookie code, it's now using util/list.h.
Now issues B_STAT_CHANGED notifications when directory entries changed.
rootfs_rename() was completely broken for "inter-directory" movements.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12850 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 19:56:41 +00:00
Axel Dörfler
028aae6c9c Another improvement of the debug code - it seems to has a different cause than I thought.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 12:02:29 +00:00
Axel Dörfler
b82b759368 Additional debug stuff in order to have the power to fix an annoying bug
(mostly happens in the kernel debugger). Not tested, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12835 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 10:39:12 +00:00
Axel Dörfler
1333009e1c {rootfs|devfs}_read_link() did not report the correct link size on
success (they just kept the passed in buffer size unchanged).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12821 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 02:04:00 +00:00
Axel Dörfler
a460a8f084 More or less rewrote the heap wall stuff:
- it's now much cleaner than before
- it now actually works in combination with realloc() (the fix from before didn't work)
- got rid of the WALL_ALIGNMENT definition
- can now handle different WALL_SIZEs


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12820 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 01:39:38 +00:00
Axel Dörfler
da8c77faa3 The wall checking code now also works in combination with realloc(), and
it's a tiny bit cleaner, too.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12816 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-25 18:38:36 +00:00
Axel Dörfler
6d352d08b3 Added an arch_get_caller() function that returns the caller of the calling function :-)
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12810 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-25 13:58:32 +00:00
Axel Dörfler
14a578f640 If compiled with USE_WALL, check_wall() will now be exported, so that
it can be called from the outside.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12809 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-25 13:41:14 +00:00
Axel Dörfler
4195ac0c53 The devfs directory entries are now always sorted.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12803 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-25 00:41:32 +00:00
Axel Dörfler
28dd47de9e Fixed the last commit: after we have acknowledged the interrupt, the
interrupt service register bit is never set, anyway...
Thanks to Korli for reporting.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12801 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-24 18:44:39 +00:00
Axel Dörfler
49cb24e833 Added workaround for spurious interrupts on line 7/15 - they are no longer
forwarded to the standard interrupt handler. Untested, though.
For more information on the subject: http://www.ggd.nsu.ru/~serg/bsdfaq/part3.html#316
Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12800 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-24 17:05:40 +00:00
Axel Dörfler
ada5975312 fs_mount() and get_file_system() can now both handle file system names
in the form "bfs" and "file_systems/bfs/v1".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12791 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-23 18:22:04 +00:00
Axel Dörfler
47f39c93cb Merged the disk device manager module interface for file systems with the
VFS's interface, so that a file system only has to implement one interface.
As a side effect, the automatic file system detection may now work (not yet
tested, though).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12786 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-23 17:15:56 +00:00
Axel Dörfler
62d6961672 Renamed vm.c to vm.cpp and made all the changes to let it compile without
errors. Also made the VM headers C++ safe.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12694 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-16 23:17:45 +00:00
Axel Dörfler
8f8d46a3ff vm_put_area() now gives feedback wether it deleted the area or not (it
will return true in the former case).
vm_delete_areas() is now using this information to print out a warning
in this case (so that a missing vm_put_area() can now be found easier).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12693 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-16 22:37:34 +00:00
Axel Dörfler
4393552b4d The heap is now located at 384 MB, and creates a reserved range that spans over the
following 1152 MB - that area only guarantees that the heap can grow this much before
the application need the memory for something else. And even then, the heap range
is reused from top-to-bottom, allowing for maximum heap usage. Of course, if the
memory after the heap range is not claimed yet, it can still be claimed by the heap,
too. Added new syscall to create the reserved range.
Fixed a bug in vm_delete_areas(): when it removed reserved areas, the area list
could get messed up.
Fixed a bug in resize_area(): resized areas could never be deleted (missing vm_put_area())!
resize_area() now supports reserved regions (but not perfectly yet, see ToDo items).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12692 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-16 22:15:13 +00:00
Axel Dörfler
a3e9996e9d Added support for special reserved address ranges: they will be used
only if memory becomes tight, and then the range is used from end to
start.
This is useful to reserve heap address ranges.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12675 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-15 15:56:55 +00:00
Axel Dörfler
20a6e5473b Renamed RESERVED_REGION_ID to RESERVED_AREA_ID.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12674 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-15 15:06:57 +00:00
Axel Dörfler
ccc8865ba2 Added an additional flag B_OVERCOMMITTING_AREA (currently to be specified
along the protection flags).
Changed the handling of B_STACK_AREA types and anonymous vm_areas: now
every area can overcommit if B_OVERCOMMITTING_AREA was specified.
B_STACK_AREA areas are still automatically overcommitting, but
B_KERNEL_STACK_AREA areas no longer.
vm_store_anonymous_noswap.c now only tests for guard pages if there were
any specified which is only done for B_STACK_AREA areas.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12673 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-15 15:03:44 +00:00
Axel Dörfler
d5b04e50f8 First step into a new block allocation strategy for the block_cache
(right now, it's still malloc/free, just encapsulated in an allocator class).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12662 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-13 18:18:28 +00:00
Axel Dörfler
0faec19e8a Cleanup, turned off debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12653 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-12 23:43:39 +00:00
Axel Dörfler
6bdc405f75 Whenever KPath is used, it will now be tested if it could be initialized
(thanks to Ingo for the reminder...).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12652 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-12 23:31:04 +00:00
Axel Dörfler
90a0e0b9d9 Cleanup, turned off debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12651 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-12 23:29:28 +00:00
Axel Dörfler
6094d89f2f Merged branches/developer/axeld/driver_recognition changed r12307:12637 into trunk.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12638 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-12 03:27:44 +00:00
Axel Dörfler
cbd1d9977f Changed all _kern_*() calls to use KPath instead of a path buffer on the stack.
This reduces the stack usage quite a lot, and since file system calls could be
nested (for example, a mounted image on a volume), definitely a must, too.
Might be a good idea for user calls, too, though, although it's not urgent.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-12 01:14:01 +00:00
Axel Dörfler
0953c83ebd Fixed another bug: after a partition had been mounted, it was only marked
mounted, but no one told it about its volume ID - that caused "mountvolume"
not to be able to return a valid mount point.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12548 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-03 01:59:17 +00:00
Axel Dörfler
47729f044c Fixed a possible bug in path_to_vnode(): if called before a root
file system has been mounted, it would have crashed (that for example
happened if you deleted the kernel settings file...).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12547 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-03 01:05:20 +00:00
Axel Dörfler
b20667b35b {install|remove}_io_interrupt_handler() now correctly handle the B_NO_ENABLE_COUNTER flag.
Lots of cleanup:
- moved B_NO_ENABLE_COUNTER flag definition out of int.h to KernelExport.h, as it's
  described in the BeBook (although it's probably not really used that often :))
- int.c no longer has any platform dependent code (+ 0x20 on interrupt numbers is gone);
  it's now entirely handled in the arch/x86/ section.
- the io_vectors[] is now statically initialized, instead of allocated from the heap
- removed {install|remove}_interrupt_handler(); they weren't that useful, arch_smp_init()
  is now calling install_io_interrupt_handler() correctly instead
- introduced a new arch_int.h header file that currently contains NUM_IO_VECTORS only
  (though on x86, it also has ARCH_INTERRUPT_BASE == 0x20).
- changed the return type from {install|remove}_io_interrupt_handler() from "long" to
  "status_t"
- rearranged and cleaned the PIC initialization code, made the PIC code more prominent
- changed comments that talk about a non existing 8239 (the PIC chip is actually 8259)
- moved arch/x86/interrupts.h to the source directory, as it's not used outside
- added BeOS compatible interrupts_enabled() function, that should replace our
  equivalent (and private) are_interrupts_enabled()


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12477 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-27 01:08:35 +00:00
Axel Dörfler
b51d2e941a Now uses the ring_buffer implementation instead of cbuf.
Decreased the pipe buffer to 32768 bytes (it's 4096 on BeOS).
pipefs_select/deselect() did no locking.
Switched to using the BenaphoreLocker where possible.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12381 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 22:43:35 +00:00
Axel Dörfler
718b5114e0 This should fix the build after all the kernel/system renaming.
If anything is still broken (and was not before :)), please shout.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12361 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 13:59:17 +00:00
Axel Dörfler
2d690920ac Renamed system/core to system/kernel.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12360 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 13:22:10 +00:00