#include <klibc/string.h>
#include <lunaix/ds/btrie.h>
#include <lunaix/fs.h>
-#include <lunaix/mm/page.h>
#include <lunaix/mm/pmm.h>
#include <lunaix/mm/valloc.h>
#include <lunaix/mm/vmm.h>
pcache_free_page(void* va)
{
ptr_t pa = vmm_del_mapping(VMS_SELF, (ptr_t)va);
- pmm_free_page(KERNEL_PID, pa);
+ pmm_free_page(pa);
}
static void*
pcache_alloc_page()
{
int i = 0;
- ptr_t pp = pmm_alloc_page(KERNEL_PID, 0), va = 0;
+ ptr_t pp = pmm_alloc_page(0), va = 0;
if (!pp) {
return NULL;
}
- if (!(va = (ptr_t)vmap(pp, PG_SIZE, PG_PREM_RW, 0))) {
- pmm_free_page(KERNEL_PID, pp);
+ if (!(va = (ptr_t)vmap(pp, PAGE_SIZE, KERNEL_DATA))) {
+ pmm_free_page(pp);
return NULL;
}
void
pcache_init(struct pcache* pcache)
{
- btrie_init(&pcache->tree, PG_SIZE_BITS);
+ btrie_init(&pcache->tree, PAGE_SHIFT);
llist_init_head(&pcache->dirty);
llist_init_head(&pcache->pages);
struct pcache_pg* pg;
while (buf_off < len && errno >= 0) {
- u32_t wr_bytes = MIN(PG_SIZE - pg_off, len - buf_off);
+ u32_t wr_bytes = MIN(PAGE_SIZE - pg_off, len - buf_off);
int new_page = pcache_get_page(pcache, fpos, &pg_off, &pg);
if (new_page) {
// Filling up the page
- errno =
- inode->default_fops->read_page(inode, pg->pg, PG_SIZE, pg->fpos);
+ errno = inode->default_fops->read_page(inode, pg->pg, pg->fpos);
if (errno < 0) {
break;
}
- if (errno < PG_SIZE) {
+ if (errno < (int)PAGE_SIZE) {
// EOF
len = MIN(len, buf_off + errno);
}
int new_page = pcache_get_page(pcache, fpos, &pg_off, &pg);
if (new_page) {
// Filling up the page
- errno =
- inode->default_fops->read_page(inode, pg->pg, PG_SIZE, pg->fpos);
+ errno = inode->default_fops->read_page(inode, pg->pg, pg->fpos);
if (errno < 0) {
break;
}
- if (errno < PG_SIZE) {
+ if (errno < (int)PAGE_SIZE) {
// EOF
len = MIN(len, buf_off + errno);
}
pg->len = errno;
} else if (!pg) {
- errno = inode->default_fops->read_page(
+ errno = inode->default_fops->read(
inode, (data + buf_off), len - buf_off, pg->fpos);
buf_off = len;
break;
return 0;
}
- int errno =
- inode->default_fops->write_page(inode, page->pg, PG_SIZE, page->fpos);
+ int errno = inode->default_fops->write_page(inode, page->pg, page->fpos);
if (!errno) {
page->flags &= ~PCACHE_DIRTY;