Commit Graph
100 Commits
Author SHA1 Message Date
Ingo Weinhold 5d1f3d53e2 get_next_physical_address(): Directly update the
gKernelArgs.physical_allocated_range array. This way it is always up to date
and we don't need to fix it in mmu_init_for_kernel().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35802 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-10 18:38:57 +00:00
Ingo Weinhold 73a72c42e2 Added get_free_address_range() to get a free range in a given range array.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35801 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-10 18:36:44 +00:00
Ingo Weinhold 8485307948 Reverted unnecessary part of r35433.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35758 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-04 10:38:04 +00:00
Ingo Weinhold a915c50a60 panic() when running out of MTRRs. I know I'm gonna regret this...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35755 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-04 09:49:53 +00:00
Ingo Weinhold affb47166b add_mtrrs_for_range(): Fixed computation of the register ranges. Per power of
2 size we might need to use two registers (for the start and the end of the
range).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35753 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-04 09:43:04 +00:00
Ingo Weinhold 2a196c6349 exchange_with_empty() did not set the freeMagazine return value to NULL when
the maximum magazine count wasn't reached yet. With object_depot_store() not
resetting its local variable, a magazine could thus be emptied and freed
twice. Fixes #5489 and #5497.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35752 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-04 01:55:37 +00:00
Ingo Weinhold 1aed263998 TracingMetaData::_InitPreviousTracingData():
* More output.
* Actually increment errorCount when encountering an error. The loop
  condition would never be false this way.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35750 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-03 23:23:09 +00:00
Ingo Weinhold 7263efe581 Override Fault() method for VM{Device,Null}Cache to prevent vm_soft_fault()
from inserting a clean page, if a fault happens. VMNullCaches are used by the
slab's memory manager -- all page faults in slab areas are serious bugs and
we want to panic() immediately.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35748 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-03 22:08:47 +00:00
Ingo Weinhold 5cf6995685 The usual cleanup after Axel. ;-) Define vm_page_num_pages() which is now
used by the block cache.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35745 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-03 21:02:34 +00:00
Ingo Weinhold 6dacf0502d Ignore physical memory below 1 MB. This is a work-around for buggy BIOSes
providing incorrect memory types. It doesn't cost us anything, since the
kernel reserves all but the unusable range later anyway. Should fix #1925.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35736 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-03 14:54:46 +00:00
Ingo Weinhold d40a935560 Boot loader (x86 mmu.cpp):
* Made the page table allocation more flexible. Got rid of sMaxVirtualAddress
  and added new virtual_end address to the architecture specific kernel args.
* Increased the virtual space we reserve for the kernel to 16 MB. That
  should suffice for quite a while. The previous 2 MB were too tight when
  building the kernel with debug info.
* mmu_init(): The way we were translating the BIOS' extended memory map to
  our physical ranges arrays was broken. Small gaps between usable memory
  ranges would be ignored and instead marked allocated. This worked fine for
  the boot loader and during the early kernel initialization, but after the
  VM has been fully set up it frees all physical ranges that have not been
  claimed otherwise. So those ranges could be entered into the free pages
  list and would be used later. This could possibly cause all kinds of weird
  problems, probably including ACPI issues. Now we add only the actually
  usable ranges to our list.

Kernel:
* vm_page_init(): The pages of the ranges between the usable physical memory
  ranges are now marked PAGE_STATE_UNUSED, the allocated ranges
  PAGE_STATE_WIRED.
* unmap_and_free_physical_pages(): Don't free pages marked as unused.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35726 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-02 18:13:06 +00:00
Ingo Weinhold a93fa3c9ea More debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35725 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-02 17:50:21 +00:00
Ingo Weinhold dcdf2ab981 Extended assert output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35724 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-02 17:49:46 +00:00
Ingo Weinhold be8c0b2480 Added missing include dependency on generated header.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35700 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-01 15:19:20 +00:00
Ingo Weinhold c0d54ea244 Enabled serial output earlier.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35699 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-01 13:48:31 +00:00
Ingo Weinhold dfa77fa65b Automatic whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35698 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-01 13:47:32 +00:00
Ingo Weinhold 84328c264b Extended assert output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-01 13:45:02 +00:00
Ingo Weinhold b7fd1cf61c Patch by Matt Madia:
* Added iprowifi4965 driver to the image.
* Add the firmware for the Wifi drivers that need it to the image.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 23:57:28 +00:00
Ingo Weinhold e82b595ac6 * TRACE(()) -> TRACE()
* Fixed warnings with tracing enabled.
* Improved some debug output.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35686 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 23:45:00 +00:00
Ingo Weinhold af0572ead2 Fixed debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35685 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 23:30:23 +00:00
Ingo Weinhold 2340fc36f1 Fixed build with tracing turned on and improve/added debug output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35658 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 16:42:22 +00:00
Ingo Weinhold fc5c7fdd81 dump_info(): We can't use use cpu_get_active_time() in the kernel debugger as
it tries to acquire the thread spinlock.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35657 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 15:39:44 +00:00
Ingo Weinhold 4891bed4d2 * large_memory_physical_page_ops_init(): Don't assign the return value before
it is fully initialized.
* arch_vm_translation_map_is_kernel_page_accessible(): Check whether
  sPhysicalPageMapper has already been initialized.

If a panic() during or before the initialization of the physical page mapper
occurred, we no longer access a partially initialized object or a NULL pointer.
This should fix the triple fault part of #1925.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35644 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 21:20:29 +00:00
Ingo Weinhold dcd2d7c4a7 Added entry cache support. Not that much to do for a read-only FS.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35643 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 21:03:40 +00:00
Ingo Weinhold 7d9bce2483 debug_resolve_vnode_path(): Avoid duplicate slash at the beginning of the
path.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35642 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 20:29:11 +00:00
Ingo Weinhold 56a3f5184c Make use of the entry cache.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35641 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 20:27:52 +00:00
Ingo Weinhold 443f705666 From: Matt Madia
Added optional package WifiFirmwareScriptData, which is for people who build
their own images & have wifi hardware that requires install-wifi-firmwares.sh
and have no active network connection.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35637 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 18:42:54 +00:00
Ingo Weinhold fc5e13e931 Enforced 80 columns limit.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35636 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 18:23:52 +00:00
Ingo Weinhold c7b1040cde From: Matt Madia
* Added "extractedSubDir" parameter to ExtractArchiveTo{Container,HaikuImage}.
  If given it specified the path of the subdirectory in the archive that
  shall be extracted.
* Added AddWifiFirmwareToHaikuImage rule for extracting Wifi firmware
  archives onto the image.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35635 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 18:15:47 +00:00
Ingo Weinhold 05bbc668af From: Matt Madia
* InstallOptionalHaikuImagePackage: Made the first argument an actual file
  name, i.e. the extension ".zip" is no longer appended by it.
* Renamed rules UnzipArchiveTo{Container,HaikuImage} to
  ExtractArchiveTo{Container,HaikuImage} and generalized them to support
  tgz/tar.gz archives (implemented in build_haiku_{image,cd}).
* Removed DownloadOptionalPackage. DownloadFile is used instead.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35634 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-27 17:48:12 +00:00
Ingo Weinhold c35e2c70cb Added option "-p" to the "vnode" debugger command. Using the entry cache it
tries to resolve the vnode's path.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35626 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-26 22:14:42 +00:00
Ingo Weinhold 83291a2a64 Added DebugReverseLookup() method to reverse-lookup directory and entry name
for a given vnode (for debugging purposes).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35625 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-26 22:13:18 +00:00
Ingo Weinhold 561d4cb9eb Sort the package credits case-insensitively. Fixes #5185.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-26 14:55:31 +00:00
Ingo Weinhold e76c1e84b7 Added static NameLessInsensitive() comparison method.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35623 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-26 14:54:32 +00:00
Ingo Weinhold 3ccf442a03 Author: Matt Madia
Cleaned up usage comment of ExtractArchive.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35622 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-26 12:34:07 +00:00
Ingo Weinhold 8b3d3d8a15 Correctly handle cases when a thread single-steps into the kernel as it can
happen on syscalls or "int" instructions. The debug exception handler sets
the thread debug flags B_THREAD_DEBUG_STOP and
B_THREAD_DEBUG_NOTIFY_SINGLE_STEP (new) and lets the thread continue. Before
leaving the kernel the thread is stopped and a single-step notification is
sent. Fixes #3487.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35620 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-25 20:20:16 +00:00
Ingo Weinhold a304e08905 Patch by Matt Madia:
Work-around for a jam bug with multiple jobs that causes the builtins.o
actions to be executed before builtins.c has been built.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35619 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-25 19:10:44 +00:00
Ingo Weinhold 76fa0be374 Patch by Matt Madia:
* Renamed DownloadFile to DownloadLocatedFile.
* Pulled a generalized rule DownloadFile out of DownloadOptionalPackage.
* Added InstallSourceArchive rule which can be used in OptionalPackages to
  add sources for installed packages to the image.
* Added configure option --include-sources to enable including the sources
  for third party software in the image.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35617 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-25 16:13:22 +00:00
Ingo Weinhold 3cd300bc61 Patch by Matt Madia: Generalized the UnzipArchive rule to support *.tgz files
as well, and renamed it to ExtractArchive.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35616 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-25 14:54:50 +00:00
Ingo Weinhold 2cf60f9070 * Moved the syscall stuff from arch_commpage.cpp to x86_syscalls.{cpp,h}.
* On context switches we do now set the IA32_MSR_SYSENTER_ESP. This saves us
  setting esp at the beginning of x86_sysenter(). More importantly when
  entering it in single-step mode, this no longer causes a double fault
  (cf. #3487). We still don't handle the resulting debug exception correctly,
  so that we still get a (continuable) panic().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35609 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 19:50:20 +00:00
Ingo Weinhold 464d9f1252 Changed object_depot_store() return value to void. It is now always takes
over ownership of the object. Fixes double free introduced in r35605.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35608 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 19:04:41 +00:00
Ingo Weinhold 27f78bf522 Fixed build after signature change in r35601.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35607 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 18:54:59 +00:00
Ingo Weinhold bc208a852b Removed TODO that isn't one.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35606 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 17:09:02 +00:00
Ingo Weinhold 462dd94a1f Don't leak the object when allocating a magazine failed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35605 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 16:47:27 +00:00
Ingo Weinhold c35b7b937b BasicTerminalBuffer::ResizeTo(): Introduced laxer buffer size limits than
the terminal size limits defined in TermConst.h. Fixes #3440, although the
main cause -- the incorrect computation of the window size limits -- still
exists.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35599 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 14:08:54 +00:00
Ingo Weinhold 6ba976d9f8 Added TODO about broken size limits computation.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35598 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 14:06:40 +00:00
Ingo Weinhold 3fa02e15e7 Automatic whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35597 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 14:06:02 +00:00
Ingo Weinhold 8480d72320 Patch by Matt Madia: Fixed stdout/stderr redirection order.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35595 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-24 10:57:08 +00:00
Ingo Weinhold a8fe8c6360 Made ProfileResult::SetInterval() virtual, so SummaryProfileResult can
forward it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35593 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 21:46:11 +00:00
Ingo Weinhold 7506431527 Made Team BReferenceable. Since teams are usually destroyed before their main
thread, we were accessing already destroyed Team objects.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35591 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 20:37:36 +00:00
Ingo Weinhold de699cf2f1 TermView::Draw(): Fixed off-by-one errors in the checks for the left/bottom
background area.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35590 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 19:18:17 +00:00
Ingo Weinhold c645be3523 Fixed getopt string.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35589 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 19:00:52 +00:00
Ingo Weinhold f6cace5aa2 TermView::Draw():
* Apparently Draw() can be invoked with new view bounds in effect before the
  FrameResized() hook has been invoked (I suppose that's not really kosher).
  Since TermView updates the terminal dimensions in FrameResized() and relied
  on the update rect passed to Draw() to translate to positions within the
  limits, an on-stack buffer could overflow, leading to #2851. Now we clamp
  the translated positions to terminal size.
* Draw the background areas right of the last column and below the last row
  explicitly instead of drawing an additional non-existing partial
  character/row.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35587 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 15:39:30 +00:00
Ingo Weinhold 28eaa574fd Fixed warning.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35586 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 14:19:19 +00:00
Ingo Weinhold 682c3066c7 Don't complain about running out of MTRRs before the CPU modules have been
loaded in the first place.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35585 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 13:51:41 +00:00
Ingo Weinhold 1e3815ba3b After fork()ing we need to close the PTY master FD in the child. Otherwise
closing/killing the Terminal will not automatically wake up children
reading/writing the slave end. Fixes #3340 and probably #5395.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35584 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 13:49:30 +00:00
Ingo Weinhold 035edd562b Automatic whitespace cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35583 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 13:45:28 +00:00
Ingo Weinhold 21d9331efa Beautified the output of the "io_context" command.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35582 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 13:43:43 +00:00
Ingo Weinhold 0e4ea02d0a * Use add_debugger_command_etc() for adding the debugger commands.
* Added a "devfs_cookie" command.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35581 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-23 13:42:55 +00:00
Ingo Weinhold 4262055074 * Always reset the requests in WriterLocker::AcquireWriter() and
ReaderLocker::AcquireReader() before starting to wait. This could lead to
  busy waiting in loops in certain situations.
* Got rid of the ReaderLocker::AcquireReader(bool) version to avoid confusion.
* Cleaned up and fixed the code introduced in r25408 (VMIN, VTIME support):
  - Gave the second ReaderLocker::AcquireReader() parameter the same name as
    the corresponding one of WriterLocker::AcquireWriter() and fixed its weird
    semantics (one less than the desired number of bytes -- huh?). Since it was
    not set on the request, it didn't work correctly anyway.
  - tty_input_read(): The O_NONBLOCK return code was broken. It returned B_OK
    instead of B_WOULD_BLOCK. The O_NONBLOCK mode overrides VMIN/VTIME now.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35580 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-22 23:05:39 +00:00
Ingo Weinhold 0497cb9f12 VMAnonymousCache::_MergeSwapPages(): Missing check which could lead to a NULL
pointer access. Should fix #5453.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35575 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-22 19:03:34 +00:00
Ingo Weinhold c8a0f6587d RequestOwner::Wait(): No need to publish the condition variable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-22 18:10:29 +00:00
Ingo Weinhold 28f8887517 * Made ProfileResult and ImageProfileResults BReferenceable.
* Added command line option '-S', which triggers a new summary mode. When
  enabled the image/symbol hits aren't counted for individual threads
  anymore, but summed up for all threads. The results are printed at the end.
  Works together with all profiling modes (inclusive, exclusive, callgrind).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35573 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-22 12:53:47 +00:00
Ingo Weinhold 6a28c22f5c More refactoring:
* Renamed *ProfileResultImage to *ImageProfileResult.
* Separated the image result management from the *ProfileResult classes:
  - The general per-thread image management functionality does now live in
    Thread.
  - Introduced interface ImageProfileResultContainer which is implemented by
    Thread. An instance is passed to ProfileResult::AddSamples()/PrintResult().
* Made *ProfileResultImage independent of Image. The dependency is now to
  SharedImage only.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35556 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-21 17:16:59 +00:00
Ingo Weinhold 5fc675d57e Some refactoring:
* Added new class ProfiledEntity which Thread derives from and which is the
  new dependency for the profile result classes (instead of Thread).
* Renamed *ThreadProfileResult to *ProfileResult and *ThreadImage to
  *ProfileResultImage and move ProfileResult[Image] into a new header/source
  file.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35546 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 20:31:04 +00:00
Ingo Weinhold 8b64284b67 Handle va_list copying correctly. Fixes PPC build.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35545 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 19:53:48 +00:00
Ingo Weinhold 19c4af89fd Superfluous virtuals (declared in the base class already).
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35544 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 18:08:07 +00:00
Ingo Weinhold a39c92c2df Removed superfluous typedef.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35543 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 18:04:32 +00:00
Ingo Weinhold 24244d3ceb idle_scan_active_pages(): vm_page_requeue() requires the caller to mark the
page accessed for the access debugging feature.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35542 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 17:24:14 +00:00
Ingo Weinhold 4a1f668383 * Also print the page for the page related asserts.
* Used vm_page::IsMapped() to simplify things.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35541 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 17:17:22 +00:00
Ingo Weinhold 0ea0681f58 Made the "message" command work correctly again. Broke it with my recent
changes.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35540 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 17:16:21 +00:00
Ingo Weinhold 3e5343f226 free_cached_page(): Removed incorrect asserts. The same ones appear a few
lines later anyway, after the cache has been locked and it has been verified
that the page is still a candidate. Fixes #5432.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35539 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 16:45:44 +00:00
Ingo Weinhold bd7645a12a * Made vm_page::state private and added accessor methods.
* Added kernel tracing for page state transitions.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35538 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 15:57:44 +00:00
Ingo Weinhold 98d2fc4b23 Worked around "uninitialized variable" compiler warnings.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35537 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 14:23:18 +00:00
Ingo Weinhold 8b522fcfe6 Changed ASSERT_[ALWAYS_]PRINT() to add the additional output to the panic()
message instead of printing it before calling panic().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35536 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 14:19:52 +00:00
Ingo Weinhold 9e4ad0799b * Pass the panic() format and args through to kernel_debugger_loop(), so that
the message doesn't get truncated.
* No longer print the "PANIC:" prefix when entering the kernel debugger via
  kernel_debugger().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35535 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 14:00:56 +00:00
Ingo Weinhold cd694fdbfa * Fixed abuse of the DoublyLinkedListLink. TemporaryVariables have an
explicit queued field now. Fixes #5352.
* set_debug_variable(): Disallow symbol variable names.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35534 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 13:19:41 +00:00
Ingo Weinhold 477fd1be55 Added assert in free_page().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35533 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 12:37:48 +00:00
Ingo Weinhold 211c63df5a reserve_pages(): When cannibalizing pages from the own cache it didn't check
whether the pages where mapped. Was introduced already in r22731.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 12:36:49 +00:00
Ingo Weinhold d36b9aef3e Added vm_page::IsMapped() for convenience.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35531 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 12:29:42 +00:00
Ingo Weinhold 9824ded0b0 cache_io(): Also requeue the last touched page to keep things roughly LRU
sorted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35530 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-20 10:51:53 +00:00
Ingo Weinhold c3d7933274 Added missing PPCVMTranslationMap::QueryInterrupt(). Fixes #5275.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35516 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-18 17:43:09 +00:00
Ingo Weinhold dac21d8bfe * map_physical_memory() does now always set a memory type. If none is given (it
needs to be or'ed to the address specification), "uncached" is assumed.
* Set the memory type for the "BIOS" and "DMA" areas to write-back. Not sure, if
  that's correct, but that's what was effectively used on my machines before.
* Changed x86_set_mtrrs() and the CPU module hook to also set the default memory
  type.
* Rewrote the MTRR computation once more:
  - Now we know all used memory ranges, so we are free to extend used ranges
    into unused ones in order to simplify them for MTRR setup.
  - Leverage the subtractive properties of uncached and write-through ranges to
    simplify ranges of any other respectively write-back type.
  - Set the default memory type to write-back, so we don't need MTRRs for the
    RAM ranges.
  - If a new range intersects with an existing one, we no longer just fail.
    Instead we use the strictest requirements implied by the ranges. This fixes
    #5383.

Overall the new algorithm should be sufficient with far less MTRRs than before
(on my desktop machine 4 are used at maximum, while 8 didn't quite suffice
before). A drawback of the current implementation is that it doesn't deal with
the case of running out of MTRRs at all, which might result in some ranges
having weaker caching/memory ordering properties than requested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35515 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-18 13:52:43 +00:00
Ingo Weinhold d4af8f3e33 Added several TODOs for problems of the IOBuffer virtual vecs code.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35509 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-17 16:00:05 +00:00
Ingo Weinhold 176f7588eb Added warning to vm_map_physical_memory_vecs().
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35508 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-17 15:58:12 +00:00
Ingo Weinhold 1f611c018b The file cache code was completely ignoring the vm_page::modified flag. In
particular it wouldn't set the flag when writing something to a page, but
only move it to the modified queue. Since mapping the page would move it to
another queue, the information that the page was modified would be lost and
it would never be written to disk. Was well reproducible with a Haiku image
build and limited amount of memory.
Fixes the hopefully last remaining cause for #5374.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35500 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-16 17:22:56 +00:00
Ingo Weinhold 6949076049 * Added some more asserts for cached pages.
* full_scan_inactive_pages(): Fixed syntactical glitch (missing "else").
  Affected only the active paging mode and was relatively harmless. The worst
  case would be that an inactive page would be moved to the cached queue
  although its usage_count hadn't dropped to 0 yet, thus freeing it before
  pages that deserved it more.
* move_page_to_active_or_inactive_queue():
  - Was ignoring the page's modified flag, thus potentially moving a modified
    page to the cached queue. That could happen only in rare cases though,
    like when the page was still mmap()ped while being written and modified and
    unmapped before being done.
  - No longer move the page to the inactive queue, even if its usage count is 0.
    In idle mode the page daemon doesn't look at inactive pages, so the page's
    stats wouldn't be updated anymore.
  - Renamed to move_page_to_appropriate_queue().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35499 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-16 17:12:42 +00:00
Ingo Weinhold 665e7ac629 map_page(): Got rid of the activatePage parameter. We always move previously
inactive pages to the active queue. This has the advantage that the page
daemon will keep track of those pages even in idle mode (where it only
processes the active queue).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35498 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-16 16:54:01 +00:00
Ingo Weinhold 4bb4f79355 Added assert.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35497 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-16 16:49:52 +00:00
Ingo Weinhold 22fb471ff0 * page_writer(): Missing continue in the temporary skipping case.
* vm_page_write_modified_page_range(): Need to DEBUG_PAGE_ACCESS_END() a bit
  later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35487 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 23:01:31 +00:00
Ingo Weinhold 4322b983cd Fixed the build with DEBUG_PAGE_ACCESS enabled.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 22:50:28 +00:00
Ingo Weinhold fa47a7c434 page_writer():
* Use the same criterion when to write back temporary pages as the page daemon.
* Move wired and temporary pages that shall not be written back to the active or
  inactive queue so they don't get stuck in the modified queue and potentially
  cause the page writer to run permanently without actually making progress
  (#5382).

page writing implementation:
* If writing back a temporary page failed, move it back to the inactive or
  active queue, so it doesn't get stuck in the modified queue. If active paging
  continues, it might find its way back to the modified queue in the next
  iteration, but that improves the situation a bit at least. Particularly with
  the port heap pages not really being swappable ATM.
* Never dequeue pages from the modified queue. We mark them busy, so the page
  writer will skip them anyway. This allows others to play with the page to some
  extend (at least allowing to move it between the queues). This fixes #5404.
* Removed PageWriteWrapper::ClearModifiedFlag(). We clear the modified flag in
  PageWriteWrapper::SetTo(), now, so that the page writer doesn't need to do
  that explicitly either.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35485 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 22:40:37 +00:00
Ingo Weinhold bf96cfdcbe Added TODO regarding the non-swappability of the initial port heap area.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35484 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 22:19:49 +00:00
Ingo Weinhold 3795172c67 VMVnodeCache::AcquireUnreferencedStoreRef(): We put the wrong vnode when ours
was already deleted.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35483 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 22:18:39 +00:00
Ingo Weinhold ba3d62b66f X86VMTranslationMap::UnmapArea(): Don't change the page state before
it has been unmapped. This way modified pages could end up in the "cached"
queue without having been written back. That would be a good explanation for
#5374 (partially wrong file contents) -- as soon as such a page was freed,
the invalid on-disk contents would become visible.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35477 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 19:36:17 +00:00
Ingo Weinhold c1f3da7b5b UnmapPage() requires the caller to deal with the debug page access marking,
so the fallback implementations of UnmapPages() and UnmapArea() need to do
that. Not relevant for x86.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35476 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 19:10:44 +00:00
Ingo Weinhold 0f2666ecc2 _user_set_memory_protection(): Missing page access debug markers.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35475 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 18:49:12 +00:00
Ingo Weinhold b0f5b17072 Removed PageWriteWrapper::CheckRemoveFromShrunkenCache() and moved removing
the page to Done().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35474 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-15 18:47:45 +00:00
Ingo Weinhold 4dafcc3b3b Since we potentially split segments into different regions, we need to
consider that when filling in the text and data ranges of the image info.
This fixes #5361 and #5351, caused by libtracker.so not finding its own
image.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35407 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-04 19:01:11 +00:00
Ingo Weinhold 695f0b114b Moved resattr.cpp to src/bin, made it buildable for Haiku, and fixed a
warning.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35406 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-04 12:59:37 +00:00