b1e06d23ce
free respective free and cached pages. * Removed the unused vm_page_allocate_page_run_no_base(). * vm_page_allocate_page_run() (and allocate_page_run()): - Use vm_page_reserve_pages() instead of vm_page_try_reserve_pages(), i.e. wait until the reservation succeeds. - Now we iterates two times through the pages to find a suitable page run. In the first iteration it only looks for free/clear pages, in the second iteration it also considers cached pages. This increases the chance of the function to succeed, when a lot of caching is going on. This reduces the amount of memory required to use the IOCache when booting off the anyboot Live CD to around 160 MB in qemu. It also seems to work with 128 MB, but the syslog indicates that some memory allocations fail, which is not exactly inspiring confidence. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36489 a95241bf-73f2-0310-859d-f6bbb57e9c96
73 lines
2.1 KiB
C
73 lines
2.1 KiB
C
/*
|
|
* Copyright 2002-2009, Axel Dörfler, axeld@pinc-software.de.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
|
* Distributed under the terms of the NewOS License.
|
|
*/
|
|
#ifndef _KERNEL_VM_VM_PAGE_H
|
|
#define _KERNEL_VM_VM_PAGE_H
|
|
|
|
|
|
#include <vm/vm.h>
|
|
|
|
|
|
struct kernel_args;
|
|
|
|
extern int32 gMappedPagesCount;
|
|
|
|
|
|
struct vm_page_reservation {
|
|
uint32 count;
|
|
};
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
void vm_page_init_num_pages(struct kernel_args *args);
|
|
status_t vm_page_init(struct kernel_args *args);
|
|
status_t vm_page_init_post_area(struct kernel_args *args);
|
|
status_t vm_page_init_post_thread(struct kernel_args *args);
|
|
|
|
status_t vm_mark_page_inuse(addr_t page);
|
|
status_t vm_mark_page_range_inuse(addr_t startPage, addr_t length);
|
|
void vm_page_free(struct VMCache *cache, struct vm_page *page);
|
|
void vm_page_set_state(struct vm_page *page, int state);
|
|
void vm_page_requeue(struct vm_page *page, bool tail);
|
|
|
|
// get some data about the number of pages in the system
|
|
size_t vm_page_num_pages(void);
|
|
size_t vm_page_num_free_pages(void);
|
|
size_t vm_page_num_available_pages(void);
|
|
size_t vm_page_num_unused_pages(void);
|
|
void vm_page_get_stats(system_info *info);
|
|
|
|
status_t vm_page_write_modified_page_range(struct VMCache *cache,
|
|
uint32 firstPage, uint32 endPage);
|
|
status_t vm_page_write_modified_pages(struct VMCache *cache);
|
|
void vm_page_schedule_write_page(struct vm_page *page);
|
|
void vm_page_schedule_write_page_range(struct VMCache *cache,
|
|
uint32 firstPage, uint32 endPage);
|
|
|
|
void vm_page_unreserve_pages(vm_page_reservation* reservation);
|
|
void vm_page_reserve_pages(vm_page_reservation* reservation, uint32 count,
|
|
int priority);
|
|
bool vm_page_try_reserve_pages(vm_page_reservation* reservation, uint32 count,
|
|
int priority);
|
|
|
|
struct vm_page *vm_page_allocate_page(vm_page_reservation* reservation,
|
|
uint32 flags);
|
|
struct vm_page *vm_page_allocate_page_run(uint32 flags, addr_t base,
|
|
size_t length, int priority);
|
|
struct vm_page *vm_page_at_index(int32 index);
|
|
struct vm_page *vm_lookup_page(addr_t pageNumber);
|
|
bool vm_page_is_dummy(struct vm_page *page);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _KERNEL_VM_VM_PAGE_H */
|