Commit Graph
100 Commits
Author SHA1 Message Date
Axel Dörfler 0710d59c1c * Added a "canWait" argument to vfs_get_vnode() - you can use this to ignore
busy vnodes.
* dir_create_entry_ref() used get_vnode() incorrectly (and could therefore
  potentially prevent a file system from doing proper locking when called
  from the kernel).
* The vnode_store now uses this for its acquire_unreferenced_ref()
  implementation (and therefore for the page writer).
* read_into_cache() and write_to_cache() were still marked inline.
* The system will now wait 10 secs for a busy vnode before returning an error.
* It will also no longer panic in that case.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22485 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-08 16:06:32 +00:00
Axel Dörfler 899d854005 * B_LOW_MEMORY_NOTE now starts earlier, at 8 MB left.
* vm_low_memory_state() now periodically recomputes the state in case the
  low memory thread is waiting for something.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-08 13:56:49 +00:00
Axel Dörfler 7faf279d73 The block allocator needs to reserve pages, too, when it maps pages.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22482 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-08 08:25:47 +00:00
Axel Dörfler b21fc3c730 Added another test case to the menu trigger test that could reproduce the last
problem of BMenuItem::SetTrigger() that got fixed in r22476 (see bug #1506 for
the details).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22477 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-07 17:22:30 +00:00
Axel Dörfler f1be468272 fTriggerIndex was still a byte index in BMenuItem::SetTrigger() - this one
fixes bug #1506 once and for all :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-07 17:20:28 +00:00
Axel Dörfler 20b232e900 Actually forgot this nail: the file cache will now reserve the pages it will
allocate with the vm_cache locked - this is necessary to be able to steal pages
from itself (large files...).
The system doesn't actually lock up anymore, but it still renders itself unusable;
obviously the page thief does not work correctly, yet. The rest of the experience
is created by our current scheduler (the page thief runs and runs, but it doesn't
free any pages anymore).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22466 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-07 13:32:13 +00:00
Axel Dörfler 0633dcc2c6 * Fixed a serious oversight that could result in trying to insert a page
twice into the same cache: cache_io() called read_into_cache() (or
  write_to_cache()), and that broke down the request into smaller parts.
  It then called read_chunk_into_cache() (or write_chunk_to_cache() resp.)
  to actually allocate pages and fulfill the request.
  However, it needed to unlock the cache for each chunk, and in the mean
  time someone else could insert pages into the remaining chunks.
* Now, cache_io() already takes care of chunking the data which makes this
  approach safe, and also simplified the code a bit - read_into_cache()/
  write_to_cache() are gone now. I've renamed read_chunk_into_cache() to
  read_into_cache() (same for the write function).
* Also got rid of that goto in that function while I was on it.
* Disabled cache_prefetch_vnode() for now (it's similar to cache_io(), but
  since it's currently not used [since no cache module is installed yet],
  I didn't want to go through updating it now, too).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22465 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-07 12:21:18 +00:00
Axel Dörfler c950f17a51 * Added a acquire_unreferenced_ref() to vm_store
* his has to be used by the page writer to make sure the vnode is still valid.
* This should have been the final nail on the Luposian bug - I haven't tested
  it yet, but we'll certainly see :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22462 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-06 15:35:38 +00:00
Axel Dörfler 80f5469291 * struct vnode is an opaque type now, removed void* where it was used incorrectly.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22461 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-06 15:33:12 +00:00
Axel Dörfler 5c7dbe881d Applied François' patch to be able to free large allocations. Even though the
heap is going away soon, it doesn't hurt to have it in the repository.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22457 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-06 13:14:11 +00:00
Axel Dörfler 1211351476 The page thief can now also steal active pages under pressure.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22456 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-06 11:38:03 +00:00
Axel Dörfler 0e18334057 * Mapping a page might actually need memory - since we usually have locks that
interfere with the page thief, we always need to have reserved a page for
  this upfront. I introduced a function to the vm_translation_map layer that
  estimates how much pages a mapping might need at maximum. All functions that
  map a page now call this and reserve the needed pages upfront.
  It might not be a nice solution, but it works.
* The page thief could run into a panic when trying to call vm_cache_release_ref()
  on a non-existing (NULL) cache.
* Also, it will now ignore wired active pages.
* There is still a race condition between the page writer and the vnode
  destruction - writing a page back needs a valid vnode, but that might just
  have been deleted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22455 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-06 11:18:21 +00:00
Axel Dörfler 7ce5ca3222 The page scanner must not turn pages inactive that are actually wired
(currently, wired pages don't always have the PAGE_STATE_WIRED, but a
wired_count).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22449 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-05 16:54:50 +00:00
Axel Dörfler edf668344a * Added some docs.
* Removed dead code.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22439 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-04 16:53:02 +00:00
Axel Dörfler 9d8c209014 * vm_remove_all_page_mappings() now returns an accumulation of the flags of
the unmapped page.
* This is needed by everyone who calls this to make sure modifications to a
  page aren't ignored. Namely, the page scanner and the page thief were
  affected.
* Cleaned up locking the page's cache a bit in page_thief(); there is now
  a helper class that takes care of everything.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22438 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-04 16:36:35 +00:00
Axel Dörfler 06cd40f399 Forgot to replace the error code with the new "mayBlock" logic, thanks Ingo!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22437 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-04 15:11:48 +00:00
Axel Dörfler 417f276c05 Forgot to commit the fs_shell with r22434, thanks for the note, Stefano!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22435 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-04 13:23:00 +00:00
Axel Dörfler 3e9513aa4a * fs_{write|read}_pages() now has an additional argument "mayBlock".
* the page writer don't allow to block, while all other writers do. This fixes
  bug #1509. The reason the page writer needs this is because it marks several
  pages from different caches as busy.
* Fixed a warning about ASSERT being defined already in BFS, since
  util/DoublyLinkedList.h now includes debug.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22434 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-04 12:45:15 +00:00
Axel Dörfler a82d70c719 Fixed PLL clock for i8xx chips again.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22415 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 17:40:05 +00:00
Axel Dörfler e5b464d09f Added a TODO what we need to do with stolen active pages - for now, we don't
do anything with them, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22413 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 16:06:17 +00:00
Axel Dörfler 4421183286 * Changed Ld rule to allow adding resource files.
* Changed ResAttr rule to allow not deleting the file before writing the
  attributes.
* Added application signatures for the runtime_loader and zbeos, just so that
  they may have an icon, too (hint, hint) :-)
* As a side effect, this also let's FileTypes handle these two as apps (even
  though they aren't), so that I can close bug #606.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22412 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 15:22:13 +00:00
Axel Dörfler 2760c4cd73 * load_program() (and probably others) could call delete_image() with a NULL
pointer - which it now handles gracefully.
* This also fixes starting the runtime loader directly: it no longer crashes
  but will just return an error.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22409 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 13:17:19 +00:00
Axel Dörfler 828d9454da * Fixed module leak in case there was an error during init when used on BeOS.
* Check safemode settings only when it's not already disabled (doesn't make
  sense to check those then).
* Minor cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22408 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 11:56:33 +00:00
Axel Dörfler fb151b4af1 Fixed initialization threading issues I introduced yesterday.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 10:54:32 +00:00
Axel Dörfler b5b11466b2 If opening the net_stack driver failed because there was no stack, opening it
a second time would magically work, as it skipped its initialization then...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22405 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 01:01:01 +00:00
Axel Dörfler 9f0d226c72 The no-swap store shouldn't fool the page writer into believing that its pages
could be written back. This should stop the page thief from stealing active
pages that cannot be recreated easily :-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22404 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-02 00:01:18 +00:00
Axel Dörfler a977fc17e3 Build fix; I renamed the "dos" file system to "fat".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22396 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-01 15:52:28 +00:00
Axel Dörfler 10194ebc8a Minor build fix - it still doesn't link, though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22395 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-01 15:43:45 +00:00
Axel Dörfler 7746846941 * The ProgressWindow now starts centered over the reference window on every
open.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22393 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-10-01 10:21:12 +00:00
Axel Dörfler e2693621b6 Correctly implemented the missing BBitmap::GetOverlayRestrictions() on the
client and the server. This should fix bug #1490, but I haven't tested it yet.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22388 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-30 16:03:53 +00:00
Axel Dörfler 083de48a4b * Rewrote the trigger selection mechanism: it now searches for uppercase
characters first, and then falls back to take everything. fTrigger is now
  uint32 and works with all unicode characters; unlike in BeOS, the
  MenuTriggerTest application now works correctly in Haiku.
* fTriggerIndex is now a character position, not a byte position of the label;
  this allows BMenuItem::DrawContent() to draw the trigger at the correct
  position, even if there are multi-byte UTF-8 characters.
* The above fixed bug #1506; triggers are still not working, though.
* Rewrote Menu.h header.
* Renamed all private methods (that are not called by BWindow) to have the
  underscore prefix.
* Removed unused methods.
* Some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22384 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-30 10:52:45 +00:00
Axel Dörfler b15c9adec7 * Decoupled the page_thief() from the low memory handler chain. This is
necessary because low memory handlers might need to wait for other services
  while we need to make sure the page thief can always steal pages.
* Made the page thief more aggressive when memory is critical: added a third
  run where it will also steal a small amount of active pages to keep things
  going.
* The page thief did not maintain the cache's reference correctly in all
  situations.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-30 09:36:28 +00:00
Axel Dörfler 16da0b3cdd Added test application for menu triggers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22377 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-29 18:17:40 +00:00
Axel Dörfler 3392e9bcd6 * Added some more debug output.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22375 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-29 15:48:11 +00:00
Axel Dörfler b062823d81 * register_low_memory_handler() was called too early by several kernel
components - now, we divide the initialization of that service into two parts
  which allows this (before, most handlers were gone after boot).
* Added debugger command that dumps the low memory handlers.
* The slab allocator now registers its low memory handler with a higher
  priority, so that it'll run before the potentially heavier ones.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22374 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-29 15:46:40 +00:00
Axel Dörfler ab88b095f2 * bfs_{read|write}_pages() now only try to lock - this fixes a possible
deadlock whenever someone without a lock (like the page_writer()) is calling
  this function.
* Added a new ReadWriteLock::TryLock() method.
* Renamed bfs_read_vnode() and bfs_release_vnode() to bfs_get_vnode() and
  bfs_put_vnode() just like those functions are called in fs_interface.h.
* Fixed a warning in BPlusTree::_SplitNode().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22372 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-29 14:06:04 +00:00
Axel Dörfler a3fc7b4b33 The "priority" of a handler is no longer ignored: the handlers are now
inserted into the list according to their priority; higher priority
handlers are now called first.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-28 21:47:31 +00:00
Axel Dörfler 5036d66c8f vm_cache_resize() did not care about busy pages - now it does.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22353 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-28 21:20:57 +00:00
Axel Dörfler a6778735f9 bonefish+axeld:
* We now have a page writer that takes some pages from the modified queue
  and writes it back every few seconds. It can be triggered by the page
  scanner to do that more often, though. That mechanism can be greatly
  improved once we have our I/O scheduler working.
* Removed vm_page_write_modified_page() again - it was all "eaten up" by
  the page writer.
* Reworked vm_page_write_modified_pages() a bit: it now uses
  vm_test_map_modification() and vm_clear_map_flags() instead of the
  iterating over all areas which wouldn't even work correctly.
  The code is much simpler now, too.
* You usually put something to the tail of a queue, and remove the contents
  from the head, not vice versa - changed queue implementation to reflect this.
* Additionally, there is now a enqueue_page_to_head() if you actually want the
  opposite.
* vm_page_requeue() allows you to move a page in a queue to the head or tail.
* Replaced vm_clear_map_activation() with vm_clear_map_flags() which allows
  you to clear other flags than PAGE_ACCESSED.
* The page scanner dumps now some arguments with each run.
* Removed the old disabled pageout_daemon() from NewOS.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22348 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-28 15:50:26 +00:00
Axel Dörfler 5c4ed86b56 * Moved some definitions from vm_types.h that functions in vm.h need as
arguments into vm.h.
* This should fix the broken build from earlier - thanks Stefano for the note!
* That also allowed to clean some other includes a bit.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22331 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 13:01:18 +00:00
Axel Dörfler 9ef250072b * Don't use the private vm_map_physical_memory() but just
map_physical_memory().
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22330 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 12:45:11 +00:00
Axel Dörfler e6dc7903e4 * vm.h no longer includes vm_types.h - only those that actually need access
to the private VM types are including vm_types.h now.
* Removed vm_page, vm_area, vm_cache, and vm_address_space typedefs; it's
  cleaner this way, and the actual types are only used in C++ files now,
  anyway.
* And that caused changes in many files...
* Made commpage.h self-containing.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22329 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 12:21:33 +00:00
Axel Dörfler f98d60ae04 * Removed the automatic release of the "modified_pages_available" semaphore
in enqueue_page() - it doesn't really belong there.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22328 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 12:12:24 +00:00
Axel Dörfler 6e03805fb2 Forget to actually delete some old C files.
For some reason, shell wildcards do not include deleted files... :)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22327 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 12:10:06 +00:00
Axel Dörfler 393fceb5a0 * Cleaned up vm_types.h a bit, and made vm_page, vm_cache, and vm_area
opaque types for C.
* As a result, I've renamed some more source files to .cpp, and fixed
  all warnings caused by that.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22326 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-27 10:29:05 +00:00
Axel Dörfler 8692ec023c * Renamed vm_page_write_modified() to vm_page_write_modifed_pages() and
introduced a new vm_page_write_modified_page().
* Resolved a TODO: vm_page_write_modified_pages() did not mark a to be
  written page busy but unlocked its cache which could let someone else
  steal that page in the mean time.
* Moved the logic when to move a page to the active or inactive queue to
  a new function move_page_to_active_or_inactive_queue().
* Moved page_state_to_string() to vm_page(); it's now also used by the
  "page" and "page_queue" KDL commands.
* Made the output of the "page_queue list" command more useful.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22323 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 20:19:51 +00:00
Axel Dörfler 44e2fd093c Actually, it's not a good idea to increase the usage_count, since every access
is tracked while the page scanner runs much slower. Now, we just set it to a
fixed positive, so that they can easily age in case they are actually unused.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22320 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 18:00:45 +00:00
Axel Dörfler 8e0f884c71 * Since the page scanner and thief can work more effectively when no vm_caches
are locked, there is now a vm_page_reserve_pages() call to ensure upfront that
  there is a page for me when I need it, and may have locked some caches.
* The vm_soft_fault() routine now makes use of that feature.
* vm_page_allocate_page() now resets the vm_page::usage_count, so that the file
  cache does not need to do this in read_chunk_into_cache() and
  write_chunk_to_cache().
* In cache_io() however, it need to update the usage_count - and it does that
  now. Since non-mapped caches don't have mappings, the page scanner will punish
  the cache pages stronger than other pages which is accidently just what we
  want.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22319 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 17:42:25 +00:00
Axel Dörfler 8a25e1293b Implemented a part of block_cache_set_dirty() so that it can gracefully exit
in case there is nothing to do.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22318 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 14:01:28 +00:00
Axel Dörfler e97e022aa7 * block_cache_set_dirty() was used incorrectly; I wonder why I write any
documentation... when you ask the block cache for a writable block, it's
  automatically dirty.
* This fixes bug #1330.
* Minor style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22317 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 13:19:57 +00:00
Axel Dörfler 42cd7306a8 Renamed "dos" file system to "fat".
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22316 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 09:43:58 +00:00
Axel Dörfler 6d4aea4796 bonefish+axeld:
* Removed the vm_cache/vm_store ref_count duality that besides being a bit ugly
  also created the page dameon cache retrieval problem: now, only areas (and
  cache consumers) retrieve a reference to the store (and therefore, the vnode).
  The page daemon doesn't need to care about this at all anymore, and the pseudo
  references of the vm_cache could be removed again.
* Rearranged deletion of vnodes such that its ID can be reused directly after
  fs_remove_vnode() has been called.
* vm_page_allocate_page() no longer panics when it runs out of pages, but just
  waits for new pages to become available using the new sFreeCondition condition
  variable - to make sure this happens in an acceptable time frame, it'll
  trigger a run of the low memory handlers.
* Implemented a page_thief() that steals inactive pages from caches and puts
  them into the free queue. It runs as a low memory handler.
* The file cache now sets the usage count on the pages it inserts into the
  cache (needs some rework though, cache_io() doesn't do it yet).
* Instead of panicking, the kernel will currently dead lock in low memory
  situations, since BFS does a bit too much in bfs_release_vnode().
* Some minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22315 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 00:20:23 +00:00
Axel Dörfler f9057a35a0 bonefish+axeld:
* The page daemon now runs independently from the low memory state.
* It now also increases its frequency and scanned pages, as well as decreases
  the interval between runs with increasing memory pressure.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22314 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-26 00:06:18 +00:00
Axel Dörfler 3cd731ada3 * The low memory handler now runs more often in more critical situations.
* vm_low_memory() no longer calls call_handlers() directly, but just triggers
  a run immediately.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22313 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 23:58:31 +00:00
Axel Dörfler 2b14cdd11c * Added a mutex_trylock() function.
* Replaced release_sem() with release_sem_etc() for future addition of the
  B_DO_NOT_RESCHEDULE flag.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22308 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 16:41:52 +00:00
Axel Dörfler 8c657126cd * Removed unused vm_page::busy_{reading|writing} fields.
* Fixed vm_page_allocate_page_run(): it did not take the pageState into account,
  and would therefore return uninitialized memory (ie. B_CONTIGUOUS areas would
  contain garbage).
  Now, it stores if a page is cleared in a new vm_page::is_cleared field.
* Some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22306 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 15:04:29 +00:00
Axel Dörfler 282c8843cd Accidently left debug output turned on; also updated copyright year.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22305 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 14:16:18 +00:00
Axel Dörfler 7acb68edf9 Made the private B_HIDE_APPLICATION message (now a misnomer) hide all applications
that share the same signature - so that this feature is now consistent to what the
Deskbar does.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22304 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 13:38:10 +00:00
Axel Dörfler 04d7b50bde Added shortcut 'h' to the Switcher to hide applications.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22303 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 13:28:50 +00:00
Axel Dörfler 229f4986d2 * Added private (as of now) B_HIDE_APPLICATION message that calls
do_minimize_team() (which is what the Deskbar does when you select
  "Hide All").
* Added keyboard shortcuts to minimize, and zoom a window, and to hide
  the whole application (Cmd+Ctrl+M/Z/H respectively). The former two
  are also present in Dano and up.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22302 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 13:15:15 +00:00
Axel Dörfler eabbb1b365 * Implemented double click support in the USB HID driver - in the future, this
should really be moved into the input_server, though (BeOS does it in the
  driver, too).
* Fixed warnings.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22301 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 12:43:34 +00:00
Axel Dörfler e0a627c141 The TTY now only allows session leaders to open it; consoled only called setsid()
too late, it does it now before starting the console.
This fixes bug #1502, and also allows to debug the GUI servers again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22300 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-25 10:51:50 +00:00
Axel Dörfler 22c5a76dee setlocale(, "") now no longer returns an error, but returns "C" now; we don't
(yet) support any locale anyway, so evaluating LC_ALL and friends doesn't make
much sense at this point.
This fixes bug #1499.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22297 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-24 22:26:03 +00:00
Axel Dörfler 64fd7c1a00 This fixes the problem of launching more than one document with one application
at once with Tracker (eg. launching several text documents) - only the first one
would have been opened, and an error B_BAD_VALUE would have been reported for the
others:
* HandleAddApplication() did not return the correct token in case of a
  pending registration; therefore, BRoster::_LaunchApp() would try to
  check the registration with invalid arguments.
* HandleIsAppRegistered() put the pending registration requests into
  the fIARRequestsByToken map using the wrong key, so that they could
  not be found again.
* Minor cleanup (fixed indentation of not so temporary debug code).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22296 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-24 21:48:06 +00:00
Axel Dörfler cbd4081064 * Fixed PLL timing computation for the i9xx chips - I mixed post2 min/max values, and did
not take the VCO limits into account; both could (and would during testing) create invalid
  frequencies.
* Also reverted the order in which the PLL divisors are traversed to match the order of what
  is used in the X driver to create comparable output (our error computation is based on float,
  though, and should therefore create more accurate values).
* The i965 introduced a special register for the surface; the former display base register
  is now only used for the view offset. Instead of setting the base manually here and there,
  there is now a set_frame_buffer_base() function.
* The DPMS code will now also turn off/on the PLL clock generator.
* The code needs some more cleanup, and while the driver now produces the correct timing on
  my i965 system, I'm now greeted by a black screen after startup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22289 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-24 09:02:35 +00:00
Axel Dörfler a4e527db79 * Fixed build for GCC 2.95.3 - it does not support newer C syntax.
* Minor cleanup (there shall be 2 lines of space between functions).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22281 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-23 17:21:41 +00:00
Axel Dörfler 523a30f313 Implemented I2C support to get the DDC EDID info from the monitor - it's working as is, but
nothing is done with the data yet (besides dumping them to the serial output).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22272 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-21 18:06:56 +00:00
Axel Dörfler 96eb4ebe33 Made i2c.h and ddc.h C++ safe.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22271 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-21 17:33:35 +00:00
Axel Dörfler fd7e4cc333 Made providing a place for vdif and vdifLength optional in ddc2_read_edid1().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22270 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-21 16:59:43 +00:00
Axel Dörfler 93a1ccabb9 * Separated I2C from DDC a bit more.
* i2c_bus now contains a i2c_timing structure, so that you don't need
  both to talk to the I2C bus.
* Therefore, there is now a void ddc2_init_timing() function to get the
  the timing DDC needs.
* Cleanup in radeon's monitor_detection.c, and updated it to work with
  the DDC/I2C changes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22265 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-19 22:36:55 +00:00
Axel Dörfler 0c85ed21ae Forgot to commit the header...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22255 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-19 18:52:55 +00:00
Axel Dörfler 61dad86a02 * No longer switch between divisor register set 0 and 1; it doesn't really
make any sense.
* "pll" might have been set incorrectly on i8xx chips.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22253 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-19 15:07:58 +00:00
Axel Dörfler 5e1d6fb269 * Added _ALIGN() and _ALIGNBYTES macros.
* Added cmsg macros.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22172 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-04 21:36:59 +00:00
Axel Dörfler ef27f7d0e0 Ported over atftpd from Linux - should work on BSD as well, now.
Not yet tested, and it will probably not work correctly until we support
IP_RECVDSTADDR correctly (we don't support that CMSG stuff yet).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22171 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-04 21:35:58 +00:00
Axel Dörfler 079c69cbfd Added daemon() function to libbsd.so.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22164 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-04 12:32:20 +00:00
Axel Dörfler 87689e25ea * sMappingLock is now a mutex instead of a spinlock.
* The vm_translation_map is now correctly held in all of the vm_ mapping
  functions.
* Removed the old vm_daemons.c file - there is now a new vm_daemons.cpp
  which contains the beginnings of our new page daemon.
  So far, it's pretty static and not much tested. What it currently does
  is to rescan all pages in the system with a two-handed clock algorithm
  and push pages into the modified and inactive lists.
* These inactive pages aren't really stolen yet, even though their mappings
  are removed (ie. their next access will cause a page fault). This should
  slow down Haiku a bit more, great, huh? :-)
* The page daemon currently only runs on low memory situations, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22156 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 15:41:14 +00:00
Axel Dörfler d8badf6791 * Renamed page queues according to our style guide.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22155 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 15:35:09 +00:00
Axel Dörfler b50494aaac * file_cache_set_size() now calls file_cache_invalidate_file_map() with the
correct values (resolving a TODO); however, the latter doesn't do anything
  with those yet.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22154 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-03 12:42:53 +00:00
Axel Dörfler 8a3cfa2cf3 * Made menu windows behave differently than others: before, they were just
always put between window screens and modal all windows (before floating
  all ones), so a BWindowScreen couldn't have menus at all.
  Now, they behave more like floating app windows, just that they float above
  all other application windows, such that all window feels (also BWindowScreen)
  can now have menus.
* Reenabled keyboard redirection to the top most window in case it's a menu;
  bug #1152 no longer applies due to the above change.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22149 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-02 12:16:28 +00:00
Axel Dörfler 4c751e51c8 Added a test application to investigate how BeOS deals with keyboard input
in menus - the application will crash as soon as you open the "Crash" sub
menu.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22148 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-09-02 12:02:57 +00:00
Axel Dörfler 22e95c5911 * creating (or dividing) reserved areas did not acquire a ref to an address
space - but they were released upon deletion. It's probably not really
  needed, but now all reserved areas also grab a reference to their address
  space.
* Rearranged team tear down to be a bit more sane: the I/O context is removed
  first (where semaphores/areas/ports/whatever might still be used), and the
  address space is deleted last.
* delete_area() can now remove its address space reference again (due to the
  two changes above), and therefore fixes bug #1374.
* cleaned up vm_address_space.c a bit (no functional change there, though).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22130 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-31 14:20:28 +00:00
Axel Dörfler 7bc5a06be6 * BShelf::_AddReplicant() did not recognize zombies if their object was not
inherited from BView.
* BShelf::_AddReplicant() did not honour the fAllowZombies flag correctly; if
  it wasn't allowed, no error message was given.
* Both of these changes fixes the crashing of the Deskbar as described in
  bug #555.
* instantiate_object() now also fires a message to the syslog if the object's
  image could not been loaded. Some cleanup, no longer resets errno.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22117 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-30 01:03:33 +00:00
Axel Dörfler a632458d8e The wonders of signals:
* Since the app_server launched the input_server, it would also get notified
  when the latter died via a signal - but LinkReceiver could return B_INTERRUPTED
  in that case (it didn't check the return value of port_buffer_size()) which
  the app_server misinterpreted and quit itself... this fixes the hanging part
  of bug #1298.
* But the input_server still wasn't restarted, because the Registrar had it
  still listed as being running. Now, the Registrar checks not just periodically
  for died teams, it will also check for it when a new application registers
  itself. This fixes the rest of bug #1298.
* Removed the old (disabled) R5 style input_server launch mechanism from the
  app_server.
* MessageLooper now prints a bit more information when a port is supposed to
  have been deleted.
* The default implementation of MessageLooper::_GetLooperName() is now
  returning the name of the semaphore of its BLocker instead of "unnamed
  looper".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22115 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-30 00:09:43 +00:00
Axel Dörfler def5fadafc Added Mail's spell checker files to the image, thus closing bug #1221.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22111 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-29 19:31:32 +00:00
Axel Dörfler 451cbc4a94 * SudokuSolver::ComputeSolutions() can now be called more than once without
doubling the solution list.
* ComputeSolutions() will now check if solving the Sudoku is affordable for
  this algorithm (at least 1/6th of the fields must be known). This fixes
  one part of bug #1435.
* SudokuView now checks if the Sudoku is already solved before trying to
  fill in a value from the solution (and then it did not find a free spot,
  surprisingly). This fixes the other part of bug #1435.
* SudokuView now beeps if there was no solution.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22110 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-29 13:24:31 +00:00
Axel Dörfler c4a589b09a There is no reason the printers directory shouldn't have the folder icon.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22104 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-29 10:22:54 +00:00
Axel Dörfler 22ca66b9f8 Fixed bug #1028 from both sides:
* FindPanel::SetUpAddRemoveButtons() called Window()->FindView() but did not
  check if Window() was NULL.
* BWindow now always checks the result of a BAutolock - this is why Tracker
  got away with this bug on BeOS; NULL windows cannot be locked...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22102 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-29 00:40:40 +00:00
Axel Dörfler 4f6fa362cf * Fixed driver initialization - you are supposed to call init_driver()
and uninit_driver() yourself. We're also using this to let the controller
  access the pci_device object.
* Fixed some style violations for your pleasure ;-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22082 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-27 09:36:35 +00:00
Axel Dörfler 7bd1d755c4 Applied patch by Fredrik Ekdahl to fix the compilation with GCC 4 - thanks!
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22062 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-26 15:31:52 +00:00
Axel Dörfler d578543aa6 * Added a first game to the image: Sudoku. It comes with a solver and generator
for three different levels (from "Very Easy" to "Hard"). Have fun!
* Feel free to do a nicer icon!
* Stack.h is actually verbatim copy of a kernel header which we might want
  to move to a more public place (like shared).
* ProgressWindow is taken from ShowImage, but adapted to suit different
  needs.
* It seems to trigger a bug in the interface kit or app_server: when moving
  the mouse around, the right border of a field is sometimes lost. This
  does not happen in BeOS, and there is actually no code that looks responsible
  for this - it might be an off by one error in the region code, though?


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22056 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-25 17:39:46 +00:00
Axel Dörfler 8be13cd585 * SCSI SIM module driver shell for the AHCI driver for Marcus.
It is loaded on boot, and the SCSI bus manager tries to scan its bus which
  of course fails at the moment. Hope that helps :-)
* Moved the driver to its new location; it's a SCSI bus controller, so it
  should be placed in busses/scsi.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22048 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-23 23:29:08 +00:00
Axel Dörfler 3460c2c4eb * Fixes to let the device manager try to use the driver:
- module name didn't have the "/device_v1" suffix (which is used to
    differentiate device modules, as they can be everywhere in the path).
  - ahci_get_supported_paths() now tells the device manager that it
    exports a PCI disk device.
* Moved ahci out of the "scsi" sub-directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22041 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-22 18:44:38 +00:00
Axel Dörfler f7deaad7ee If Moved() has been called, Clicked() can't be called anymore; this actually
fixes a crashing bug when dropping a column too fast.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22032 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 19:10:50 +00:00
Axel Dörfler 9b60051929 Added the Network preferences application in its early state to the image; it's
already a helpful addition.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22028 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 17:47:53 +00:00
Axel Dörfler a6230f90a3 * Added B_ASYNCHRONOUS_CONTROLS to the window flags (smooth slider).
* Put local headers at the top, and fixed self-containment.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22027 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 10:32:45 +00:00
Axel Dörfler 8ac552e4d1 Fixed dumping the stack trace for the current thread by ID - that should have
been a warning (at least in C++ it is).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22026 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 10:26:54 +00:00
Axel Dörfler 27eab79b56 * BTitleView now resizes its columns asynchronously. As a side-effect, this
also solves the slow resizing part of bug #160 under Haiku (where GetMouse()
  obviously gets a lot more messages).
* Rearranged the interaction between BTitleView and ColumnTrackState a bit,
  removed some unused cruft.
* PoseView::ResizeColumn() had obviously required code to redraw the resizing
  lines on enlarging the column excluded for whatever reason.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22025 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 01:43:17 +00:00
Axel Dörfler 95741c2a49 Added a test case for SetMouseEventMask() as well.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22024 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-21 00:18:32 +00:00
Axel Dörfler ed432e8ec6 Data tracks are now filtered out. This should fix bug #1345 - but I did not yet test it.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22023 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-20 23:34:34 +00:00
Axel Dörfler b78583734c The client-side implementation of B_NO_POINTER_HISTORY did only work for SetEventMask(),
but not for SetMouseEventMask(). We now track the value of that mask in a dedicated
member variable.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22022 a95241bf-73f2-0310-859d-f6bbb57e9c96
2007-08-20 23:24:26 +00:00