Commit Graph
100 Commits
Author SHA1 Message Date
Michael Lotz a16d549ade Add scripting property for toggling fullscreen. 2012-03-04 15:26:05 +01:00
Michael Lotz dd2116b8eb Update wpa_supplicant package for gcc2.
It should work on current images again and contains a few usability
tweaks that make it simpler to navigate/use.
2012-02-03 21:25:09 +01:00
Michael Lotz 17e82349a7 Remove coreutils and tcpdump from the DEBUG blacklist.
The DEBUG build for these has been fixed in hrev43636 and hrev43637
respectively.
2012-01-07 03:47:46 +01:00
Michael Lotz 4506b3385f Use static inline instead of extern inline to fix DEBUG build.
Fixing this directly even though it is technically vendor code as it
has been modified rather heavily (as per #8252).
2012-01-07 03:27:03 +01:00
Michael Lotz d26f88068b Add xfreopen.c to the library build, fixes DEBUG build.
The actual xfreopen function is only relevant if O_BINARY != 0 and all
places invoking it are surrounded by if statements that are always
false if O_BINARY == 0. The compiler therefore stripped all the calls
out at the default -O2, but this obviously breaks down with DEBUG on.
2012-01-07 03:13:01 +01:00
Michael Lotz ecea46bcfd Unconditionally add debug.c. Fixes DEBUG build.
The file is guarded with DEBUG so this doesn't change anything for
non-debug builds. Inspired by patch in #8252 by Urias McCullough.
2012-01-07 02:27:16 +01:00
Michael Lotz 423affc209 Fix warnings for DEBUG build. Build with tracing still broken.
This is a modified version of a patch in #8252 by Urias McCullough.
2012-01-07 02:18:44 +01:00
Michael Lotz 91d012366c Avoid warning on certain debug builds.
The variable is used in the TRACE(), but that is only enabled for
DEBUG >= 2. This therefore avoids a warning on DEBUG=1 builds.

Inspired by patch in #8252 by Urias McCullough.
2012-01-07 02:04:56 +01:00
Michael Lotz f13be4928b Pad the transfer buffer to prevent out of bounds access.
The HIDReportItem reads 32 bit chunks from the report buffer. To avoid
having to check the remaining buffer space on each extraction, we pad
the buffer so it is always valid to read 32 bits at a time. Also add
a comment explaining why we do it that way.

Thanks to Johannes Anderwald for pointing out the potential out of
bound access!
2012-01-04 23:33:07 +01:00
Michael Lotz 3de4c1e20b Fix copy&paste error and double launch of Terminal.
Apparently the "Deskbar" part was a copy&paste error. Also there was
an additional launch call making two Terminal windows come up. Should
fix #8243.
2011-12-15 20:04:53 +01:00
Michael Lotz eb5e1c09e3 Fix the build, sorry for the noise. 2011-12-12 15:20:48 +01:00
Michael Lotz 7bdc07318d Fix use after free in error case. CID 10545. 2011-12-12 03:37:58 +01:00
Michael Lotz 85819ae108 Remove extra free() that lead to a double free. CID 10546. 2011-12-12 03:34:56 +01:00
Michael Lotz c11c724e25 Remove needless atomic_add() accessing freed memory. CID 10551. 2011-12-12 03:15:39 +01:00
Michael Lotz a15a38c104 Fix use after free. CID 10567. 2011-12-12 01:58:50 +01:00
Michael Lotz fe10dd20bf Fix indirect use of fState after deleting it.
Calling SetIcon(NULL) calls MakeEmpty() that tries to delete all
manipulators on fState. So we may only delete fState after that call.

Also reported as CID 10856.
2011-12-12 00:26:40 +01:00
Michael Lotz d86197cec3 Fix build with DEBUG on. 2011-12-11 18:29:55 +01:00
Michael Lotz 6ef7d359c7 ASSERT() that there really aren't any wired pages. 2011-12-11 17:08:10 +01:00
Michael Lotz af09f123d3 Create the right cache type ([non-]swappable) on copy on write.
When forking a team, copy on write areas (and therefore caches) are
created for all the areas in the parent team, but they were always
created as swappable. If the parent team had some B_FULL_LOCK areas,
which aren't swappable, the wrong type of cache would be created which
lead to them not being mergeable later on (causing a panic).

Comments about a possibly cleaner way to figure out the cache type
would be welcome.
2011-12-11 17:08:10 +01:00
Michael Lotz 44c3f5c188 Clean up the mess added in hrev43461 and solve it differently.
* Define a MEMALIGN macro that is either just defined to malloc() or
  to the actual memalign() depending on where KMessage is used. We only
  use memalign() inside the kernel and libroot.
* Add a comment to the macro explaining that this allows the use of
  special heap implementations that might return unaligned buffers for
  debugging purposes.
2011-12-10 23:20:18 +01:00
Michael Lotz e339322a88 Fix hrev43405 by moving the reference above the autolocker.
The change in hrev43405 wasn't correct, as it put the reference
object definition after the one of the corresponding locker, causing
the reference to be released before the unlock would happen.

Finally fixes #8187. Thanks Ingo for pointing that out.
2011-12-10 21:35:40 +01:00
Michael Lotz bcc4a523b6 Fix invalid use of iterator after erase and lock corruption.
* The call to _TeamDied() causes the team that the iterator points to
  be removed from the map. Therefore the iterator becomes invalid and
  may not be accessed anymore (including incrementing it). As we've had
  to unlock, anything might have happened to to map, so take the safe
  route and just start over.
* For each dead team that was found the AppManager was unlocked, but
  there were no balancing lock calls, therefore causing the lock count
  to get corrupted.
2011-12-10 21:23:35 +01:00
Michael Lotz 5585262bb1 Revert hrev43455 and instead just align the size.
While this isn't really correct, it works for the use case it is
intended and doesn't open the can of worms we get when trying to do
memalign() across platforms (due to build tools use of KMessage).
2011-12-10 21:03:14 +01:00
Michael Lotz 33f0ed7a03 Revert hrev43457.
This reverts commit 82929f8a76.
2011-12-10 21:03:13 +01:00
Michael Lotz 8eff10a8bf Revert hrev43458.
This reverts commit 80e6a84bf0.
2011-12-10 21:03:13 +01:00
Michael Lotz a173514ad1 Revert hrev43459.
This reverts commit c8a48d783c.
2011-12-10 21:03:12 +01:00
Michael Lotz c8a48d783c Same as hrev43457 (- the error) but for the bootloader heap. 2011-12-10 19:15:10 +01:00
Michael Lotz 80e6a84bf0 Fix alignment mask, sorry for the noise. 2011-12-10 19:09:30 +01:00
Michael Lotz 82929f8a76 Add a simplistic memalign() to the runtime_loader heap.
As KMessage now makes use of memalign() the simple heap in the
runtime_loader needs to provide that as well. Fixes build.
2011-12-10 19:07:33 +01:00
Michael Lotz 9a87646122 Only free the old buffer if we owned it and set owning flag.
* If we cloned the buffer due to misalignment, only free the old buffer
  if we actually own it (i.e. if it was allocated by us).
* Set the KMESSAGE_OWNS_BUFFER flag after cloning the buffer. Previously
  the buffer was leaked in the clone case.
2011-12-10 18:46:29 +01:00
Michael Lotz d0aa07489c Ensure proper alignment instead of just checking for it.
* If there is an alignment requirement then better use memalign() to
  make sure that it is met.
* Since the BMessageAdapter possibly sets a buffer directly, make a
  properly aligned copy of the buffer if it happens to be misaligned.
2011-12-10 17:55:47 +01:00
Michael Lotz 268ddbd76f Fix a few function signatures in the guarded heap.
* Not including malloc.h caused the memalign() signature to not be a C
  signature, therefore leading to linking errors. Fix the missing
  include and explicitly add extern "C" as well.
* Some remaining asterisk style cleanup.
2011-12-10 17:24:10 +01:00
Michael Lotz 3de380692a Update the guarded heap areas after fork.
We don't actually use them for anything yet though.
2011-12-10 17:24:09 +01:00
Michael Lotz b5cc636fa4 Make a copy of the mode list as it might be realloced later.
The fModes array is realloc'ed as needed when adding modes. Therefore
the fModes pointer handed in to AddModes() becomes invalid once
_MakeSpace() returns in that function causing a freed memory block to
be used as input.

To avoid that we make a copy of the base mode list and then use that to
add the modes for each color space.
2011-12-09 16:00:35 +01:00
Michael Lotz 6ba5fa4d64 Ensure 0 termination of the buffer being converted to a string.
The file content isn't normally 0 terminated, so making a string out of
it would usually result in reading beyond the allocated buffer to find
the string length, possibly leading to a crash.
2011-12-09 15:29:10 +01:00
Michael Lotz c5fd97e486 Remove needless call to String(), there's an operator for that.
The operator const char*() automatically converts to the needed type
so the explicit BString::String() call isn't needed here. Thanks to
Clemens for pointing that out.
2011-12-07 17:09:14 +01:00
Michael Lotz 97680106f0 Add a userland version of the guarded heap to libroot_debug.
The guarded heap uses mprotect() to protect freed/unallocated pages so
that any access to such a page results in a segfault. It also installs
a segfault handler that in such an event prints some info about the
accessed page and then calls the debugger with a meaningful message.

It implements the same interface as the debug heap so it can simply be
swapped out by changing the Jamfile. As it doesn't support most of the
extra debug features (wall checking is obviously superfluous, but it
also doesn't help in leak checking) and as it is hugely space
inefficient I left it disabled for now.
2011-12-07 00:40:47 +01:00
Michael Lotz 674e76845d Returning a string stored in a local BMessage doesn't work.
Instead use a BString object as return type that copies the string
so that it stays valid after return.
2011-12-07 00:26:07 +01:00
Michael Lotz f28e19f5be Use the right value as id for the BTranslatorRoster call.
The loop counter was used as the id directly instead of using it as the
index into the translator_id array.
2011-12-07 00:21:21 +01:00
Michael Lotz e6f323bb57 Strings owned by local stack objects can't be returned.
The BString is destroyed when the function returns and takes the
storage pointed to by BString::String() with it, so returning such a
pointer is bogus. Instead the return type is now a BString which takes
over ownership of the string.
2011-12-07 00:16:23 +01:00
Michael Lotz f589e913a7 Fix end of range check to not read beyond the allocation.
The counter j is equal to fTeamCount if no matching team was found in
the team array. Therefore using it as an index into the team array was
invalid.
2011-12-07 00:10:17 +01:00
Michael Lotz 5e5eef0b5b Fix the page need calculation, it was possibly off by one. 2011-12-07 00:09:31 +01:00
Michael Lotz da3ce43440 Erase the entry only after its last use. CID 11042. 2011-12-06 20:00:48 +01:00
Michael Lotz 011002e5e4 Fix uses of member after deleting the object. CID 10535, 10534. 2011-12-06 19:37:46 +01:00
Michael Lotz 8eec72dcab Use safe length measure function and fix length usage.
* We may get non-terminated strings so we need to use the
  UTF8NextCharLen() version that works with a length. Previously we may
  have read beyond buffers, possibly leading to crashes.
* Also the length parameter is used as an actual length and not as
  buffer size. The length check was wrong before, which resulted in the
  function returning too early if an offset was supplied.
* Added a comment about the guaranteed 0 termination in one case.
* Minor cleanup.
2011-12-06 19:15:36 +01:00
Michael Lotz 9f65f3dd66 Rename variable so it is clear what is measured (bytes). 2011-12-06 19:13:26 +01:00
Michael Lotz dd26f81c56 Add an UTF8NextCharLen() version that takes a string length.
This one works with non-terminated strings that we may need to handle.
It also validates that the sequence is valid UTF-8 so it results in
the same behaviour as the version that is used when converting to
codes (syncing the enumeration and drawing behaviour).
2011-12-06 19:09:56 +01:00
Michael Lotz fb3c47ebad Fix passing non-terminated string to font functions.
The string that is built for hashing the escapements for missing
chars was not 0 terminated, leading to accesses past the string.
Depending on what followed an allocation that could lead to too long
strings being sent to the app_server for evaluation (where, due to
defensive, programming nothing bad would actually happen). In the
unfortunate case that nothing followed the allocation (i.e. end of
heap area), it could also lead to an application crash.

Therefore ensure 0 termination of the string, check for allocation
failure and use memcpy() instead of a for loop to copy the bytes from
one string to the other.
2011-12-06 15:46:36 +01:00
Michael Lotz ded69b4c3a Only the to be protected range needs to be non-wired.
When setting memory protection, only ensure/wait for the range that
needs to be protected to not be wired instead of requiering the whole
area to be non-wired. The memory protection is done page wise and
having some parts of the area wired shouldn't preclude other parts to
be protected.
2011-12-06 15:39:56 +01:00
Michael Lotz 62bb375688 Restructure wait_for_thread_etc() to make it easier to follow.
* Avoid needless adding of the death entry if the sem is gone already.
* Delete objects as soon as they aren't needed anymore and return
  early where possible.
* Contain the thread == NULL case in its block and return from there as
  well instead of non-obviously figuring out what happened later.
* Pull out the return code asignment.
* Minor cleanup.
2011-12-06 02:30:17 +01:00
Michael Lotz da329fc012 Add missing asignment of return code in wait_for_thread_etc().
While it was detected that the thread is in the destruction phase
and that it was necessary to wait and then have a valid status code
in the death entry, that status code wasn't actually returned. This
lead to uninitialized values for the return code even though
wait_for_thread[_etc]() would return B_OK.
2011-12-06 01:53:27 +01:00
Michael Lotz ebdb8247fd Move mutex initialization earlier, analogous to hrev43320.
Avoids crashing if the bus manager init fails. Also fixes CID 10846.
2011-12-05 03:00:24 +01:00
Michael Lotz a395486027 Fix leaking the report items. CID 10880, 10881 and 10882. 2011-12-05 02:53:15 +01:00
Michael Lotz 500553860e Fix missing null check. CID 10937. 2011-12-05 02:37:35 +01:00
Michael Lotz 04c140226c Use the right form of delete. Fixes CID 11037. 2011-12-05 02:29:26 +01:00
Michael Lotz ef2eaedc2e Account for full-/lowspeed errors and ensure an error is set.
For full- and lowspeed devices the unused ping status bit works as an
additional error bit (albeit it's so generic that it isn't really
useful). Include that bit when the error counter counts down to zero.

Also ensure that an error is returned if the error counter reaches
zero, but print a warning if none of the describing bits are set.
2011-12-05 01:42:23 +01:00
Michael Lotz 2872aba0a7 Fix missing reference to the old group with lock still held.
Removing the team from the group may have released the last reference
to the group and freed it. Since we still have a locker on that group
it would later crash on unlock, therefore we need a reference to the
old group before removing the team from it.
2011-12-04 20:14:24 +01:00
Michael Lotz 336967aafd Add more debugger commands to closer inspect the guarded heap. 2011-12-04 18:47:55 +01:00
Michael Lotz 4a7b48203e Try smaller sizes if creating an area failed.
Depending on the use case the grow size may be too large to fit into
address space holes. Instead of failing try with smaller sizes until
it either worked or doesn't make sense anymore (< 1MB).
2011-12-04 18:43:20 +01:00
Michael Lotz 01eb710a91 Use a free list to make the guarded heap perform less horribly.
Pages that are freed are added to the tail of the list while allocation
candidates are taken from the head. Therefore pages that have been free
the longest are preferred, making immediate re-use less likely.

Also avoid looking for pages if the free count already tells that the
allocation can't be fulfilled.
2011-12-04 18:40:11 +01:00
Michael Lotz 5cbe06f482 Allow replacing the object cache with the guarded heap.
This allows to use the debug features of the guarded heap also on
allocations made through the object cache API. This is obivously
horrible for performance and uses up huge amounts of memory, so the
initial and grow sizes are adjusted accordingly.

Note that this is a rather simple hack, using the object_cache pointer
to transport the allocation size. The alignment is neglected completely.
2011-12-04 13:52:06 +01:00
Michael Lotz 390a6e2e02 Add support for optional inline stack traces in guarded heap. 2011-12-04 12:56:59 +01:00
Michael Lotz 24a15a69a8 Fix use of a potentially freed net_buffer.
The buffer may have been freed if its data was added to the queue, but
later the buffer size was still read from the object. A spurious
acknowledge may have been sent, or one would have gone missing,
depending on what happened with the allocation after it was freed.
2011-12-04 02:34:35 +01:00
Michael Lotz 01762bd57f Fix possibly harmful use of stale pointer in edge case.
The call to _MakeSpace() may move the extent data from the indirect
array (kept in a heap allocation) to the direct one kept inside the
class. In that case the lastExtent pointer would become stale and
further use of it would've lead to suboptimal extents in the best case
to reading/writing at the wrong point in files and possibly corruption
of another allocation in the worst (both unlikely though).

To mitigate that we now re-initialize the pointer to the correct location
if we hit the cache limit.

Also made the use of the start variable more understandable. Instaed of
decrementing it (possibly wrapping) when an extent wasn't going to be
used and later adding the vector index again, just increment whenever
we actually move to the next extent.

For bad things to happen a few conditions needed to come together though:
1. There needed to be multiple vectors that could be combined with the
existing last extent.
2. There first needed to be more extents than the cache limit and that
number then had to decrease below the cache limit again.
3. The memory needed to stay intact after being freed up until after the
evaluation (or similar enough data had to be written to it).

At least the last one was guaranteed to not be true anymore since we
re-introduced overwritting freed memory with 0xdeadbeef in the slab,
therefore nastily hiding this. I'm not sure that the first condition is
ever met either (probably the vectors are combined beforehand so that
there never are multiple adjacent ones) at least for the normal use case
(the page writer writing back pages). I was at least unable to reproduce
an actual file corruption in my testing.

Just the out of bounds access to the stale pointer happened rather easily
though and is now at least fixed.
2011-12-03 23:30:16 +01:00
Michael Lotz e62d9911ea Allocate as much as is later read, didn't do harm though.
Further in the process the flat argument size is rounded up, but the
actual allocation was done with the unaligned size causing an access
beyond the allocation when later copying the flat arguments. It didn't
do any actual harm as the block sizes of our allocator(s) use elements
that have at least such an alignment.
2011-12-03 23:13:52 +01:00
Michael Lotz b39f919dbf Remove the root device from the root devices list.
The device is added to the root devices list when initializing, but was
not removed from there again when the root device was removed and freed,
causing the list to have a stale entry. Probably fixes #3305.

The list is populated once for the _fbsd_init_hardware iteration and, if
a device was found, again for _fbsd_init_drivers. The only thing I don't
understand is why it didn't just always crash, as there should have been
a stale list entry in any case when a supported device actually was found...
2011-12-03 23:05:30 +01:00
Michael Lotz 4495409499 Abort the request instead of crashing when out of memory. 2011-12-03 22:54:48 +01:00
Michael Lotz 1fe24d0cd0 Add heap with guard pages to detect out of bound reads/writes.
This is a very simple heap implementation that allocates memory so that
the end of each allocation always coincides with a page end and is
followed by a guard page which is marked non-present. Out of bounds
access (both read and write) therefore cause a crash (unhandled page
fault).

Note that this allocator is neither speed nor space efficient, indeed it
wastes huge amounts of pages and address space so it is quite easy to
hit limits. It is intended as a pure debug feature.
2011-12-03 20:09:13 +01:00
Michael Lotz 7418dbd908 Introduce debug page wise kernel area protection functions.
This adds a pair of functions vm_prepare_kernel_area_debug_protection()
and vm_set_kernel_area_debug_protection() to set a kernel area up for
page wise protection and to actually protect individual pages
respectively.

It was already possible to read and write protect full areas via area
protection flags and not mapping any actual pages. For areas that
actually have mapped pages this doesn't work however as no fault, at
which the permissions could be checked, is generated on access.

These new functions use the debug helpers of the translation map to mark
individual pages as non-present without unmapping them. This allows them
to be "protected", i.e. causing a fault on read and write access. As they
aren't actually unmapped they can later be marked present again.

Note that these are debug helpers and have quite a few restrictions as
described in the comment above the function and is only useful for some
very specific and constrained use cases.
2011-12-03 19:49:18 +01:00
Michael Lotz 643cf35ee8 Add debug helper functions to mark pages present.
They can be used to mark pages as present/non-present without actually
unmapping them. Marking pages as non-present causes every access to
fault. We can use that for debugging as it allows us to "read protect"
individual kernel pages.
2011-12-03 19:45:31 +01:00
Michael Lotz 44dffa86c0 Fix the etc path that was accidentally changed. 2011-12-02 14:22:28 +01:00
Michael Lotz 15b483ebe7 Revert "Add temporary workaround for moved etc directory."
Revert the workaround in hrev43361 to be fixed by adjusting the path.
2011-12-02 14:18:50 +01:00
Michael Lotz e791096b81 Fix unintentional change that broke input_server in safemode.
The change to this initial index for safemode was brought in with the
flat import of the package manager branch in 323b654 where presumably
more paths were used. With this value selecting either just safe mode
or disable user add-ons would lead to no input_server add-ons being
loaded at all, leading to a system without input.
2011-12-02 14:07:55 +01:00
Michael Lotz d58a4a2478 Add temporary workaround for moved etc directory.
Package management will move the directory from common/etc to
common/settings/etc. The kernel side change that sets up the etc symlink
in the rootfs was already commited, everything still installs into the
old dir however. This symlink makes things that depend on /etc work for
now and can be removed once the files aren't populated to the old place
anymore.
2011-11-29 17:03:03 +01:00
Michael Lotz a139657921 Tracking info wasn't always retrieved with the cache locked.
Getting the object slab does a hash lookup which needs to be protected
by the cache lock. Otherwise the hash table may be resized or otherwise
modified while we do the lookup, leading to errors.
2011-11-29 00:15:34 +01:00
Michael Lotz 79f0056002 Fix virtual 8086 mode to properly account for TLS.
* The vm86 code or the code running in virtual 8086 mode may clobber the
  %fs register that we use for the CPU dependent thread local storage
  (TLS). Previously the vm86 code would simply restore %fs on exit, but
  this doesn't always work. If the thread got unscheduled while running
  in virtual 8086 mode and was then rescheduled on a different CPU, the
  vm86 exit code would restore the %fs register with the TLS value of
  the old CPU, causing anything using TLS in userland to crash later on.
  Instead we skip the %fs register restore on exit (as do the other
  interrupt return functions) and explicitly update the potentially
  clobbered %fs by calling x86_set_tls_context(). This will repopulate
  the %fs register with the TLS value for the right CPU. Fixes #8068.

* Made the static set_tls_context() into x86_set_tls_context() and made
  it available to others to faciliate the above.

* Sync the vm86 specific interrupt code with the changes from hrev23370,
  using the iframe pop macro to properly return. Previously what was
  pushed in int_bottom wasn't poped on return.

* Account for the time update macro resetting the in_kernel flag and
  reset it to 1, as we aren't actually returning to userland. This
  didn't cause any harm though as only the time tracking is using that
  flag so far.

* Some minor cleanup.
2011-11-25 16:10:19 +01:00
Michael Lotz 653ce5db53 Initialize the isochronous lock earlier.
The constructor may abort at various places and the destructor cleans up
everything already initialized. The mutex was however not initialized
early on, leading to #8153 where the mutex was destroied in the error
case, accessing uninitialized memory. Fixes #8153 though the reason for
the aborted constructor probably needs to be investigated as well.
2011-11-25 13:04:54 +01:00
Michael Lotz 8a5fb91c07 Stricter tests for PCI bridges at interrupt routing.
Validate the candidate child device a bit more by checking the device ID
and the base and subclass of the device. We don't even know if the child
is still on the PCI bus and some firmware may mark disabled devices by
simply invalidating one of these values. Possibly fixes #8111.

Added TODO concerning that we might not want to fail at all since we
ensure that we matched all devices after routing preparation at which
state we would notice any missing child devices anyway.
2011-11-18 13:03:46 +01:00
Michael Lotz 35632c56af Fix harmless oversight marking pages with the wrong state.
While the log of hrev35726 says that unusable page ranges are supposed
to be marked with PAGE_STATE_UNUSED and allocated ones with
PAGE_STATE_WIRED, both actually marked with PAGE_STATE_UNUSED.
2011-11-16 11:06:46 +01:00
Michael Lotz 4200073542 Tiny optimization by skipping a no-op iteration.
We initialize the physicalPagesEnd from physical_memory_range[0] so
re-evaluating that range is a no-op.
2011-11-16 10:56:16 +01:00
Michael Lotz 3dbd9c1148 Fix the LIMIT_AVAILABLE_MEMORY debug option.
When limiting the available memory by reducing the page count it may not
be enough to just limit sNumPages. Depending on the physical memory map
non existing pages between ranges (sNonExistingPages) would still be
added up and later subtracted from the sNumPages, resulting in a wrong
max page count. Also due to the fixed removal of non existing page
ranges the actually available memory would usually not be the amount
set via LIMIT_AVAILABLE_MEMORY.

Instead we now calculate the available memory when going through the
physical memory ranges and limit/exit as soon as we've reached the
desired amount of available memory (also ignoring further non-existing
pages).
2011-11-16 10:40:56 +01:00
Michael Lotz c12f51264b Ensure the sanity of the stats returned, make the TODO a Note.
* Ensure that we don't underflow the used_pages count and that used
  + cached pages don't overflow max_pages. As there is no locking the
  values may change while we read them so that such situations could
  arise.
* Make the TODO about the missing locking into a Note explaining the
  above, as it is not really worth adding locking here. The stats are
  only informational.
2011-11-14 19:07:37 +01:00
Michael Lotz 5247333d36 Don't do the heap size calculation when using the slab as heap.
The initial heap size calculation only applies to the legacy/debug
heap, so it isn't needed when using the slab as kernel heap.
2011-11-13 22:20:24 +01:00
Michael Lotz a28bab4790 Add the object pointers to the panic messages. 2011-11-13 22:18:29 +01:00
Michael Lotz 2cdd33d4ff Add an assert to ensure the wired count doesn't wrap. 2011-11-13 22:02:36 +01:00
Michael Lotz 3733c51d38 Fix the computation of used memory and add a TODO.
* The altered used pages calculation of hrev43168 wasn't correct, as
  the inactive page queue may (validly) contain mapped pages as well.
  Those would then get counted twice (as they are included in
  gMappedPagesCount already).
  Instead we calculate the used pages from the total page count, minus
  everything we account for otherwise. Doing it this way is possible
  without introducing any additional counters, as all the counts to
  subtract are already present (as opposed to some of the ones that
  would be needed for adding the counts up). Fixes #8109.
* Added TODO regarding the problem of not locking any of the counters
  which runs the risk of them getting modified while we haven't yet read
  all of them.
2011-11-13 22:02:36 +01:00
Michael Lotz f2b71a14d4 Revert the part of r43033 that tries to write the "be:volume_id" on mount. The
use of an attribute may cause an attribute directory access, causing a get_vnode
call that leads to KDL due to the mount not yet having completed as seen in
#8090. Moving the volume_ops initialization in bfs_mount earlier might make this
work, but it is a hack at most, as we can't really know what state the VFS is in
during a mount.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43229 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-09 22:08:44 +00:00
Michael Lotz a5c94bedb6 * Verify the MP config table signature and add some more sanity checks.
* Also reset the local and IO APIC base physical addresses when configuration
  failed.

Should fix #8102, but is otherwise untested for lack of old enough hardware.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43217 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-07 19:23:33 +00:00
Michael Lotz 90c6930ebb Add VM page allocation tracking similar to what happens in the slab already.
Introduces "page_allocation_infos" and "page_allocations_per_caller" KDL
commands.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43190 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-04 18:07:07 +00:00
Michael Lotz 905c75a595 Tiny pointer style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43189 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-04 18:04:22 +00:00
Michael Lotz 75088a863b Move AllocationTrackingInfo into a header. This way it can be re-used outside
of the slab code. It is generic as it only contains the link to a tracing entry
and not any application specific info.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43188 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-04 18:03:34 +00:00
Michael Lotz 6d41dfd95c Move some of the trace entries around so that we know the page(s) they concern
and add that info to the trace entries.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43187 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-04 18:01:15 +00:00
Michael Lotz 865a0be1c0 Add optional stack traces to {Allocate|Free}Page[Run] tracing.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43185 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-04 17:58:50 +00:00
Michael Lotz 448d8d6fcb Indent cleanup only, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43184 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-04 17:57:42 +00:00
Michael Lotz b9a6b7844d Make the USB physical memory allocator more robust. Wait for space to become
available when there is none instead of spinning around. Might help with #8053
and #8058, though it's possible that leaks or interrupt issues are the cause
for these.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43125 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 19:31:43 +00:00
Michael Lotz 3d1f420b23 bonefish+mmlr:
* Add "allocation_infos" KDL command. Can be used to print the allocation info,
  including the stack trace, given an object cache, slab, allocation within a
  slab or allocation address. It can also optionally be filtered by team/thread.
* Fix the AllocationDetailPrinterCallback to not access a possibly invalid
  trace entry for printing a stack trace.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43118 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 16:12:48 +00:00
Michael Lotz 81fea74394 bonefish+mmlr:
Add MemoryManager::DebugObjectCacheForAddress() to retrieve the ObjectCache for
a certain address from KDL.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43117 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 16:09:49 +00:00
Michael Lotz 9a79e531ef bonefish+mmlr:
* Introduce TracingMetaData::IsInBuffer() to validate that a certain memory
  range is within the valid tracing buffer limits.
* Use that when validating in tracing_is_entry_valid() before trying to access
  the entry, resolving a TODO.
* Validate the candidate time against the handed in time (if specified) as an
  additional check.
* Tiny unrelated text cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43116 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-02 16:02:07 +00:00
Michael Lotz 45cbd81436 Fix build with tracing disabled. Since capture_tracing_stack_trace() doesn't
return a stack trace when tracing is disabled we don't really need to be able
to print one either.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43088 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-01 22:49:32 +00:00
Michael Lotz a5e2a43050 Fix the build with memory manager tracing disabled. The guard was missing
in the header.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@43084 a95241bf-73f2-0310-859d-f6bbb57e9c96
2011-11-01 21:40:40 +00:00