* Added debug output to vm_low_memory.cpp.
* Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15568 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
2058e6c1d4
commit
89f5f72a15
8
src/system/kernel/cache/block_cache.cpp
vendored
8
src/system/kernel/cache/block_cache.cpp
vendored
@ -113,7 +113,7 @@ lookup_transaction(block_cache *cache, int32 id)
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - private block_cache
|
||||
// #pragma mark - cached_block
|
||||
|
||||
|
||||
/* static */
|
||||
@ -142,7 +142,7 @@ cached_block::Hash(void *_cacheEntry, const void *_block, uint32 range)
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark -
|
||||
// #pragma mark - block_cache
|
||||
|
||||
|
||||
block_cache::block_cache(int _fd, off_t numBlocks, size_t blockSize)
|
||||
@ -672,7 +672,7 @@ block_cache_init(void)
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - public transaction
|
||||
// #pragma mark - public transaction API
|
||||
|
||||
|
||||
extern "C" int32
|
||||
@ -1032,7 +1032,7 @@ cache_blocks_in_sub_transaction(void *_cache, int32 id)
|
||||
}
|
||||
|
||||
|
||||
// #pragma mark - public block cache
|
||||
// #pragma mark - public block cache API
|
||||
// public interface
|
||||
|
||||
|
||||
|
@ -1436,7 +1436,7 @@ unload_kernel_add_on(image_id id)
|
||||
|
||||
|
||||
status_t
|
||||
elf_init(kernel_args *ka)
|
||||
elf_init(kernel_args *args)
|
||||
{
|
||||
struct preloaded_image *image;
|
||||
|
||||
@ -1451,11 +1451,11 @@ elf_init(kernel_args *ka)
|
||||
|
||||
// Build a image structure for the kernel, which has already been loaded.
|
||||
// The preloaded_images were already prepared by the VM.
|
||||
if (insert_preloaded_image(&ka->kernel_image, true) < B_OK)
|
||||
if (insert_preloaded_image(&args->kernel_image, true) < B_OK)
|
||||
panic("could not create kernel image.\n");
|
||||
|
||||
// Build image structures for all preloaded images.
|
||||
for (image = ka->preloaded_images; image != NULL; image = image->next) {
|
||||
for (image = args->preloaded_images; image != NULL; image = image->next) {
|
||||
insert_preloaded_image(image, false);
|
||||
}
|
||||
|
||||
|
@ -46,10 +46,10 @@
|
||||
|
||||
//#define TRACE_VFS
|
||||
#ifdef TRACE_VFS
|
||||
# define PRINT(x) dprintf x
|
||||
# define TRACE(x) dprintf x
|
||||
# define FUNCTION(x) dprintf x
|
||||
#else
|
||||
# define PRINT(x) ;
|
||||
# define TRACE(x) ;
|
||||
# define FUNCTION(x) ;
|
||||
#endif
|
||||
|
||||
@ -704,7 +704,7 @@ dec_vnode_ref_count(struct vnode *vnode, bool reenter)
|
||||
|
||||
oldRefCount = atomic_add(&vnode->ref_count, -1);
|
||||
|
||||
PRINT(("dec_vnode_ref_count: vnode %p, ref now %ld\n", vnode, vnode->ref_count));
|
||||
TRACE(("dec_vnode_ref_count: vnode %p, ref now %ld\n", vnode, vnode->ref_count));
|
||||
|
||||
if (oldRefCount == 1) {
|
||||
bool freeNode = false;
|
||||
@ -750,7 +750,7 @@ static void
|
||||
inc_vnode_ref_count(struct vnode *vnode)
|
||||
{
|
||||
atomic_add(&vnode->ref_count, 1);
|
||||
PRINT(("inc_vnode_ref_count: vnode %p, ref now %ld\n", vnode, vnode->ref_count));
|
||||
TRACE(("inc_vnode_ref_count: vnode %p, ref now %ld\n", vnode, vnode->ref_count));
|
||||
}
|
||||
|
||||
|
||||
@ -810,7 +810,7 @@ restart:
|
||||
goto restart;
|
||||
}
|
||||
|
||||
PRINT(("get_vnode: tried to lookup vnode, got %p\n", vnode));
|
||||
TRACE(("get_vnode: tried to lookup vnode, got %p\n", vnode));
|
||||
|
||||
status_t status;
|
||||
|
||||
@ -844,7 +844,7 @@ restart:
|
||||
|
||||
mutex_unlock(&sVnodeMutex);
|
||||
|
||||
PRINT(("get_vnode: returning %p\n", vnode));
|
||||
TRACE(("get_vnode: returning %p\n", vnode));
|
||||
|
||||
*_vnode = vnode;
|
||||
return B_OK;
|
||||
@ -881,7 +881,7 @@ put_vnode(struct vnode *vnode)
|
||||
static void
|
||||
vnode_low_memory_handler(void */*data*/, int32 level)
|
||||
{
|
||||
PRINT(("vnode_low_memory_handler(level = %ld)\n", level));
|
||||
TRACE(("vnode_low_memory_handler(level = %ld)\n", level));
|
||||
|
||||
int32 count = 1;
|
||||
switch (level) {
|
||||
@ -906,7 +906,7 @@ vnode_low_memory_handler(void */*data*/, int32 level)
|
||||
mutex_unlock(&sVnodeMutex);
|
||||
break;
|
||||
}
|
||||
PRINT((" free vnode %ld:%Ld (%p)\n", vnode->device, vnode->id, vnode));
|
||||
TRACE((" free vnode %ld:%Ld (%p)\n", vnode->device, vnode->id, vnode));
|
||||
|
||||
vnode->busy = true;
|
||||
sUnusedVnodes--;
|
||||
@ -1389,7 +1389,7 @@ vnode_path_to_vnode(struct vnode *vnode, char *path, bool traverseLeafLink,
|
||||
vnode_id vnodeID;
|
||||
char *nextPath;
|
||||
|
||||
PRINT(("vnode_path_to_vnode: top of loop. p = %p, p = '%s'\n", path, path));
|
||||
TRACE(("vnode_path_to_vnode: top of loop. p = %p, p = '%s'\n", path, path));
|
||||
|
||||
// done?
|
||||
if (path[0] == '\0')
|
||||
@ -1454,7 +1454,7 @@ vnode_path_to_vnode(struct vnode *vnode, char *path, bool traverseLeafLink,
|
||||
size_t bufferSize;
|
||||
char *buffer;
|
||||
|
||||
PRINT(("traverse link\n"));
|
||||
TRACE(("traverse link\n"));
|
||||
|
||||
// it's not exactly nice style using goto in this way, but hey, it works :-/
|
||||
if (count + 1 > MAX_SYM_LINKS) {
|
||||
@ -1830,7 +1830,7 @@ dir_vnode_to_path(struct vnode *vnode, char *buffer, size_t bufferSize)
|
||||
if (path[insert] == '\0')
|
||||
path[--insert] = '/';
|
||||
|
||||
PRINT((" path is: %s\n", path + insert));
|
||||
TRACE((" path is: %s\n", path + insert));
|
||||
|
||||
// copy the path to the output buffer
|
||||
length = sizeof(path) - insert;
|
||||
@ -2316,7 +2316,7 @@ new_vnode(mount_id mountID, vnode_id vnodeID, fs_vnode privateNode)
|
||||
vnode->unpublished = true;
|
||||
}
|
||||
|
||||
PRINT(("returns: %s\n", strerror(status)));
|
||||
TRACE(("returns: %s\n", strerror(status)));
|
||||
|
||||
mutex_unlock(&sVnodeMutex);
|
||||
return status;
|
||||
@ -2344,7 +2344,7 @@ publish_vnode(mount_id mountID, vnode_id vnodeID, fs_vnode privateNode)
|
||||
} else
|
||||
status = B_BAD_VALUE;
|
||||
|
||||
PRINT(("returns: %s\n", strerror(status)));
|
||||
TRACE(("returns: %s\n", strerror(status)));
|
||||
|
||||
mutex_unlock(&sVnodeMutex);
|
||||
return status;
|
||||
@ -2489,7 +2489,7 @@ vfs_get_vnode_from_path(const char *path, bool kernel, void **_vnode)
|
||||
status_t status;
|
||||
char buffer[B_PATH_NAME_LENGTH + 1];
|
||||
|
||||
PRINT(("vfs_get_vnode_from_path: entry. path = '%s', kernel %d\n", path, kernel));
|
||||
TRACE(("vfs_get_vnode_from_path: entry. path = '%s', kernel %d\n", path, kernel));
|
||||
|
||||
strlcpy(buffer, path, sizeof(buffer));
|
||||
|
||||
@ -2557,7 +2557,7 @@ vfs_get_fs_node_from_path(mount_id mountID, const char *path, bool kernel, void
|
||||
struct vnode *vnode;
|
||||
status_t status;
|
||||
|
||||
PRINT(("vfs_get_fs_node_from_path(mountID = %ld, path = \"%s\", kernel %d)\n", mountID, path, kernel));
|
||||
TRACE(("vfs_get_fs_node_from_path(mountID = %ld, path = \"%s\", kernel %d)\n", mountID, path, kernel));
|
||||
|
||||
strlcpy(buffer, path, sizeof(buffer));
|
||||
status = path_to_vnode(buffer, true, &vnode, NULL, kernel);
|
||||
@ -2647,7 +2647,7 @@ vfs_get_module_path(const char *basePath, const char *moduleName, char *pathBuff
|
||||
|
||||
return B_OK;
|
||||
} else {
|
||||
PRINT(("vfs_get_module_path(): something is strange here: %d...\n", type));
|
||||
TRACE(("vfs_get_module_path(): something is strange here: %d...\n", type));
|
||||
status = B_ERROR;
|
||||
goto err;
|
||||
}
|
||||
@ -2693,7 +2693,7 @@ vfs_normalize_path(const char *path, char *buffer, size_t bufferSize,
|
||||
if (!path || !buffer || bufferSize < 1)
|
||||
return B_BAD_VALUE;
|
||||
|
||||
PRINT(("vfs_normalize_path(`%s')\n", path));
|
||||
TRACE(("vfs_normalize_path(`%s')\n", path));
|
||||
|
||||
// copy the supplied path to the stack, so it can be modified
|
||||
char mutablePath[B_PATH_NAME_LENGTH + 1];
|
||||
@ -2705,7 +2705,7 @@ vfs_normalize_path(const char *path, char *buffer, size_t bufferSize,
|
||||
char leaf[B_FILE_NAME_LENGTH];
|
||||
status_t error = path_to_dir_vnode(mutablePath, &dirNode, leaf, kernel);
|
||||
if (error != B_OK) {
|
||||
PRINT(("vfs_normalize_path(): failed to get dir vnode: %s\n", strerror(error)));
|
||||
TRACE(("vfs_normalize_path(): failed to get dir vnode: %s\n", strerror(error)));
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -2715,7 +2715,7 @@ vfs_normalize_path(const char *path, char *buffer, size_t bufferSize,
|
||||
if (isDir)
|
||||
error = vnode_path_to_vnode(dirNode, leaf, false, 0, &dirNode, NULL, NULL);
|
||||
if (error != B_OK) {
|
||||
PRINT(("vfs_normalize_path(): failed to get dir vnode for \".\" or \"..\": %s\n", strerror(error)));
|
||||
TRACE(("vfs_normalize_path(): failed to get dir vnode for \".\" or \"..\": %s\n", strerror(error)));
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -2723,7 +2723,7 @@ vfs_normalize_path(const char *path, char *buffer, size_t bufferSize,
|
||||
error = dir_vnode_to_path(dirNode, buffer, bufferSize);
|
||||
put_vnode(dirNode);
|
||||
if (error < B_OK) {
|
||||
PRINT(("vfs_normalize_path(): failed to get dir path: %s\n", strerror(error)));
|
||||
TRACE(("vfs_normalize_path(): failed to get dir path: %s\n", strerror(error)));
|
||||
return error;
|
||||
}
|
||||
|
||||
@ -2737,7 +2737,7 @@ vfs_normalize_path(const char *path, char *buffer, size_t bufferSize,
|
||||
}
|
||||
}
|
||||
|
||||
PRINT(("vfs_normalize_path() -> `%s'\n", buffer));
|
||||
TRACE(("vfs_normalize_path() -> `%s'\n", buffer));
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
@ -4878,7 +4878,7 @@ fs_mount(char *path, const char *device, const char *fsName, uint32 flags,
|
||||
}
|
||||
|
||||
if (!partition) {
|
||||
PRINT(("fs_mount(): Partition `%s' not found.\n",
|
||||
TRACE(("fs_mount(): Partition `%s' not found.\n",
|
||||
normalizedDevice.Path()));
|
||||
return B_ENTRY_NOT_FOUND;
|
||||
}
|
||||
@ -4893,7 +4893,7 @@ fs_mount(char *path, const char *device, const char *fsName, uint32 flags,
|
||||
if (partition) {
|
||||
diskDevice = ddm->WriteLockDevice(partition->Device()->ID());
|
||||
if (!diskDevice) {
|
||||
PRINT(("fs_mount(): Failed to lock disk device!\n"));
|
||||
TRACE(("fs_mount(): Failed to lock disk device!\n"));
|
||||
return B_ERROR;
|
||||
}
|
||||
}
|
||||
@ -4902,7 +4902,7 @@ fs_mount(char *path, const char *device, const char *fsName, uint32 flags,
|
||||
if (partition) {
|
||||
// make sure, that the partition is not busy
|
||||
if (partition->IsBusy() || partition->IsDescendantBusy()) {
|
||||
PRINT(("fs_mount(): Partition is busy.\n"));
|
||||
TRACE(("fs_mount(): Partition is busy.\n"));
|
||||
return B_BUSY;
|
||||
}
|
||||
|
||||
@ -4910,13 +4910,13 @@ fs_mount(char *path, const char *device, const char *fsName, uint32 flags,
|
||||
if (!fsName) {
|
||||
KDiskSystem *diskSystem = partition->DiskSystem();
|
||||
if (!diskSystem) {
|
||||
PRINT(("fs_mount(): No FS name was given, and the DDM didn't "
|
||||
TRACE(("fs_mount(): No FS name was given, and the DDM didn't "
|
||||
"recognize it.\n"));
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
|
||||
if (!diskSystem->IsFileSystem()) {
|
||||
PRINT(("fs_mount(): No FS name was given, and the DDM found a "
|
||||
TRACE(("fs_mount(): No FS name was given, and the DDM found a "
|
||||
"partitioning system.\n"));
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
@ -5102,7 +5102,7 @@ fs_unmount(char *path, uint32 flags, bool kernel)
|
||||
if (partition) {
|
||||
diskDevice = ddm->WriteLockDevice(partition->Device()->ID());
|
||||
if (!diskDevice) {
|
||||
PRINT(("fs_unmount(): Failed to lock disk device!\n"));
|
||||
TRACE(("fs_unmount(): Failed to lock disk device!\n"));
|
||||
return B_ERROR;
|
||||
}
|
||||
}
|
||||
@ -5111,7 +5111,7 @@ fs_unmount(char *path, uint32 flags, bool kernel)
|
||||
// make sure, that the partition is not busy
|
||||
if (partition) {
|
||||
if (partition->IsBusy() || partition->IsDescendantBusy()) {
|
||||
PRINT(("fs_unmount(): Partition is busy.\n"));
|
||||
TRACE(("fs_unmount(): Partition is busy.\n"));
|
||||
return B_BUSY;
|
||||
}
|
||||
}
|
||||
@ -5974,7 +5974,7 @@ _kern_remove_index(dev_t device, const char *name)
|
||||
status_t
|
||||
_kern_getcwd(char *buffer, size_t size)
|
||||
{
|
||||
PRINT(("_kern_getcwd: buf %p, %ld\n", buffer, size));
|
||||
TRACE(("_kern_getcwd: buf %p, %ld\n", buffer, size));
|
||||
|
||||
// Call vfs to get current working directory
|
||||
return get_cwd(buffer, size, true);
|
||||
@ -6838,7 +6838,7 @@ _user_getcwd(char *userBuffer, size_t size)
|
||||
char buffer[B_PATH_NAME_LENGTH];
|
||||
status_t status;
|
||||
|
||||
PRINT(("user_getcwd: buf %p, %ld\n", userBuffer, size));
|
||||
TRACE(("user_getcwd: buf %p, %ld\n", userBuffer, size));
|
||||
|
||||
if (!IS_USER_ADDRESS(userBuffer))
|
||||
return B_BAD_ADDRESS;
|
||||
@ -6863,7 +6863,7 @@ _user_setcwd(int fd, const char *userPath)
|
||||
{
|
||||
char path[B_PATH_NAME_LENGTH];
|
||||
|
||||
PRINT(("user_setcwd: path = %p\n", userPath));
|
||||
TRACE(("user_setcwd: path = %p\n", userPath));
|
||||
|
||||
if (userPath != NULL) {
|
||||
if (!IS_USER_ADDRESS(userPath)
|
||||
|
@ -345,7 +345,7 @@ heap_init(addr_t heapBase)
|
||||
|
||||
|
||||
status_t
|
||||
heap_init_post_sem(kernel_args *ka)
|
||||
heap_init_post_sem(kernel_args *args)
|
||||
{
|
||||
if (mutex_init(&heap_lock, "heap_mutex") < 0)
|
||||
panic("error creating heap mutex\n");
|
||||
@ -358,7 +358,7 @@ heap_init_post_sem(kernel_args *ka)
|
||||
|
||||
|
||||
status_t
|
||||
heap_init_post_thread(kernel_args *ka)
|
||||
heap_init_post_thread(kernel_args *args)
|
||||
{
|
||||
#if USE_CHECKING_WALL
|
||||
register_kernel_daemon(check_wall_daemon, NULL, WALL_CHECK_FREQUENCY);
|
||||
|
@ -80,7 +80,7 @@ static spinlock sPortSpinlock = 0;
|
||||
|
||||
|
||||
status_t
|
||||
port_init(kernel_args *ka)
|
||||
port_init(kernel_args *args)
|
||||
{
|
||||
int i;
|
||||
int size = sizeof(struct port_entry) * sMaxPorts;
|
||||
|
@ -14,7 +14,16 @@
|
||||
#include <util/AutoLock.h>
|
||||
|
||||
|
||||
static const bigtime_t kLowMemoryInterval = 2000000; // 2 secs
|
||||
//#define TRACE_LOW_MEMORY
|
||||
#ifdef TRACE_LOW_MEMORY
|
||||
# define TRACE(x) dprintf x
|
||||
#else
|
||||
# define TRACE(x) ;
|
||||
#endif
|
||||
|
||||
// TODO: the priority is currently ignored, and probably can be removed
|
||||
|
||||
static const bigtime_t kLowMemoryInterval = 3000000; // 3 secs
|
||||
|
||||
// page limits
|
||||
static const size_t kNoteLimit = 1024;
|
||||
@ -75,6 +84,10 @@ low_memory(void *)
|
||||
snooze(kLowMemoryInterval);
|
||||
|
||||
sLowMemoryState = compute_state();
|
||||
|
||||
TRACE(("vm_low_memory: state = %ld, %ld free pages\n",
|
||||
sLowMemoryState, vm_page_num_free_pages()));
|
||||
|
||||
if (sLowMemoryState < B_LOW_MEMORY_NOTE)
|
||||
continue;
|
||||
|
||||
@ -126,8 +139,10 @@ vm_low_memory_init(void)
|
||||
status_t
|
||||
unregister_low_memory_handler(low_memory_func function, void *data)
|
||||
{
|
||||
MutexLocker locker(&sLowMemoryMutex);
|
||||
TRACE(("unregister_low_memory_handler(function = %p, data = %p)\n",
|
||||
function, data));
|
||||
|
||||
MutexLocker locker(&sLowMemoryMutex);
|
||||
HandlerList::Iterator iterator = sLowMemoryHandlers.GetIterator();
|
||||
|
||||
while (iterator.HasNext()) {
|
||||
@ -147,6 +162,9 @@ unregister_low_memory_handler(low_memory_func function, void *data)
|
||||
status_t
|
||||
register_low_memory_handler(low_memory_func function, void *data, int32 priority)
|
||||
{
|
||||
TRACE(("register_low_memory_handler(function = %p, data = %p)\n",
|
||||
function, data));
|
||||
|
||||
low_memory_handler *handler = (low_memory_handler *)malloc(sizeof(low_memory_handler));
|
||||
if (handler == NULL)
|
||||
return B_NO_MEMORY;
|
||||
|
Loading…
Reference in New Issue
Block a user