mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-27 12:48:22 +00:00
mm: refactor pmm -> page
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
#include <errno.h>
|
||||
#include <kernel/alloc.h>
|
||||
#include <kernel/timekeeper.h>
|
||||
#include <kernel/pmm.h>
|
||||
#include <kernel/page.h>
|
||||
#include <kernel/vmmcache.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/init.h>
|
||||
@@ -391,7 +391,7 @@ static int devfs_getpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
// only block devices will have this called
|
||||
__assert(node->type == V_TYPE_BLKDEV);
|
||||
iovec_t iovec = {
|
||||
.addr = MAKE_HHDM(pmm_getpageaddress(page)),
|
||||
.addr = MAKE_HHDM(mm_get_page_address(page)),
|
||||
.len = PAGE_SIZE
|
||||
};
|
||||
|
||||
@@ -410,7 +410,7 @@ static int devfs_putpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
// only block devices will have this called
|
||||
__assert(node->type == V_TYPE_BLKDEV);
|
||||
iovec_t iovec = {
|
||||
.addr = MAKE_HHDM(pmm_getpageaddress(page)),
|
||||
.addr = MAKE_HHDM(mm_get_page_address(page)),
|
||||
.len = PAGE_SIZE
|
||||
};
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <kernel/slab.h>
|
||||
#include <kernel/vmm.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <kernel/pmm.h>
|
||||
#include <kernel/page.h>
|
||||
#include <hashtable.h>
|
||||
#include <mutex.h>
|
||||
#include <logging.h>
|
||||
@@ -1761,7 +1761,7 @@ static int ext2_getpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
// only regular files get cached
|
||||
__assert(node->type == V_TYPE_REGULAR);
|
||||
size_t readc = PAGE_SIZE;
|
||||
void *addr = MAKE_HHDM(pmm_getpageaddress(page));
|
||||
void *addr = MAKE_HHDM(mm_get_page_address(page));
|
||||
|
||||
iovec_t iovec = {
|
||||
.addr = addr,
|
||||
@@ -1784,7 +1784,7 @@ static int ext2_putpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
__assert(node->type == V_TYPE_REGULAR);
|
||||
size_t writec;
|
||||
iovec_t iovec = {
|
||||
.addr = MAKE_HHDM(pmm_getpageaddress(page)),
|
||||
.addr = MAKE_HHDM(mm_get_page_address(page)),
|
||||
.len = PAGE_SIZE
|
||||
};
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include <kernel/init.h>
|
||||
#include <kernel/slab.h>
|
||||
#include <kernel/auth.h>
|
||||
#include <kernel/pmm.h>
|
||||
#include <kernel/page.h>
|
||||
#include <kernel/vmmcache.h>
|
||||
|
||||
typedef struct {
|
||||
@@ -383,7 +383,7 @@ static int fatfs_putpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
__assert(node->type == V_TYPE_REGULAR);
|
||||
size_t write_count;
|
||||
iovec_t iovec = {
|
||||
.addr = MAKE_HHDM(pmm_getpageaddress(page)),
|
||||
.addr = MAKE_HHDM(mm_get_page_address(page)),
|
||||
.len = PAGE_SIZE
|
||||
};
|
||||
|
||||
@@ -410,7 +410,7 @@ static int fatfs_getpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
// only regular files get cached
|
||||
__assert(node->type == V_TYPE_REGULAR);
|
||||
size_t read_count = PAGE_SIZE;
|
||||
void *addr = MAKE_HHDM(pmm_getpageaddress(page));
|
||||
void *addr = MAKE_HHDM(mm_get_page_address(page));
|
||||
|
||||
iovec_t iovec = {
|
||||
.addr = addr,
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <logging.h>
|
||||
#include <util.h>
|
||||
#include <kernel/vmm.h>
|
||||
#include <kernel/pmm.h>
|
||||
#include <kernel/page.h>
|
||||
#include <kernel/abi.h>
|
||||
#include <time.h>
|
||||
#include <kernel/vfs.h>
|
||||
@@ -128,7 +128,7 @@ void initrd_unpack() {
|
||||
for (;;) {
|
||||
if (cleanupbytespassed >= PAGE_SIZE) {
|
||||
size_t pagec = cleanupbytespassed / PAGE_SIZE;
|
||||
pmm_makefree(FROM_HHDM(cleanupptr), pagec);
|
||||
mm_force_free_page(FROM_HHDM(cleanupptr), pagec);
|
||||
cleanupptr = (void *)((uintptr_t)cleanupptr + ROUND_DOWN(cleanupbytespassed, PAGE_SIZE));
|
||||
cleanupbytespassed %= PAGE_SIZE;
|
||||
}
|
||||
@@ -181,5 +181,5 @@ void initrd_unpack() {
|
||||
}
|
||||
|
||||
// free remaining pages to be freed
|
||||
pmm_makefree(FROM_HHDM(cleanupptr), ROUND_UP(cleanupbytespassed, PAGE_SIZE) / PAGE_SIZE);
|
||||
mm_force_free_page(FROM_HHDM(cleanupptr), ROUND_UP(cleanupbytespassed, PAGE_SIZE) / PAGE_SIZE);
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
#include <util.h>
|
||||
#include <kernel/abi.h>
|
||||
#include <kernel/devfs.h>
|
||||
#include <kernel/pmm.h>
|
||||
#include <kernel/page.h>
|
||||
#include <kernel/vmm.h>
|
||||
#include <arch/cpu.h>
|
||||
#include <string.h>
|
||||
@@ -528,10 +528,10 @@ static int tmpfs_getpage(vnode_t *node, uintmax_t offset, struct page_t *page) {
|
||||
|
||||
// since tmpfs files now store their data on the vmmcache,
|
||||
// all getpage will do will be set the page to 0 and pin it in memory
|
||||
void *phy = pmm_getpageaddress(page);
|
||||
void *phy = mm_get_page_address(page);
|
||||
void *phyhhdm = MAKE_HHDM(phy);
|
||||
|
||||
pmm_hold(phy);
|
||||
mm_hold_page(phy);
|
||||
page->flags |= PAGE_FLAGS_PINNED;
|
||||
memset(phyhhdm, 0, PAGE_SIZE);
|
||||
return 0;
|
||||
@@ -565,7 +565,7 @@ static int tmpfs_statfs(vfs_t *vfs, fsattr_t *fsattr) {
|
||||
tmpfs_t *tmpfs = (tmpfs_t *)vfs;
|
||||
|
||||
size_t total_pages, free_pages;
|
||||
pmm_getinfo(&total_pages, &free_pages);
|
||||
mm_get_page_statistics(&total_pages, &free_pages);
|
||||
|
||||
fsattr->io_size = PAGE_SIZE;
|
||||
fsattr->block_size = PAGE_SIZE;
|
||||
|
||||
+12
-12
@@ -454,11 +454,11 @@ int vfs_write_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size
|
||||
goto leave;
|
||||
|
||||
size_t writesize = min(PAGE_SIZE - startoffset, size);
|
||||
void *address = MAKE_HHDM(pmm_getpageaddress(page));
|
||||
void *address = MAKE_HHDM(mm_get_page_address(page));
|
||||
|
||||
err = iovec_iterator_copy_to_buffer(iovec_iterator, (void *)((uintptr_t)address + startoffset), writesize);
|
||||
if (err) {
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
goto leave;
|
||||
}
|
||||
|
||||
@@ -471,7 +471,7 @@ int vfs_write_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size
|
||||
pageoffset += 1;
|
||||
pagecount -= 1;
|
||||
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
if (err)
|
||||
goto leave;
|
||||
}
|
||||
@@ -483,11 +483,11 @@ int vfs_write_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size
|
||||
goto leave;
|
||||
|
||||
size_t writesize = min(PAGE_SIZE, size - *written);
|
||||
void *address = MAKE_HHDM(pmm_getpageaddress(page));
|
||||
void *address = MAKE_HHDM(mm_get_page_address(page));
|
||||
|
||||
err = iovec_iterator_copy_to_buffer(iovec_iterator, address, writesize);
|
||||
if (err) {
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
goto leave;
|
||||
}
|
||||
|
||||
@@ -497,7 +497,7 @@ int vfs_write_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size
|
||||
if (flags & V_FFLAGS_NOCACHE)
|
||||
err = writenocache(node, page, pageoffset * PAGE_SIZE + offset);
|
||||
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
|
||||
if (err)
|
||||
goto leave;
|
||||
@@ -567,11 +567,11 @@ int vfs_read_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size,
|
||||
goto leave;
|
||||
|
||||
size_t readsize = min(PAGE_SIZE - startoffset, size);
|
||||
void *address = MAKE_HHDM(pmm_getpageaddress(page));
|
||||
void *address = MAKE_HHDM(mm_get_page_address(page));
|
||||
|
||||
err = iovec_iterator_copy_from_buffer(iovec_iterator, (void *)((uintptr_t)address + startoffset), readsize);
|
||||
if (err) {
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
goto leave;
|
||||
}
|
||||
|
||||
@@ -585,7 +585,7 @@ int vfs_read_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size,
|
||||
pageoffset += 1;
|
||||
pagecount -= 1;
|
||||
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
}
|
||||
|
||||
for (uintmax_t offset = 0; offset < pagecount * PAGE_SIZE; offset += PAGE_SIZE) {
|
||||
@@ -595,11 +595,11 @@ int vfs_read_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size,
|
||||
goto leave;
|
||||
|
||||
size_t readsize = min(PAGE_SIZE, size - *bytesread);
|
||||
void *address = MAKE_HHDM(pmm_getpageaddress(page));
|
||||
void *address = MAKE_HHDM(mm_get_page_address(page));
|
||||
|
||||
err = iovec_iterator_copy_from_buffer(iovec_iterator, address, readsize);
|
||||
if (err) {
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
goto leave;
|
||||
}
|
||||
|
||||
@@ -608,7 +608,7 @@ int vfs_read_iovec(vnode_t *node, iovec_iterator_t *iovec_iterator, size_t size,
|
||||
// try to turn it into anonymous memory
|
||||
vmmcache_evict(page);
|
||||
}
|
||||
pmm_release(FROM_HHDM(address));
|
||||
mm_release_page(FROM_HHDM(address));
|
||||
}
|
||||
leave:
|
||||
MUTEX_RELEASE(&node->size_lock);
|
||||
|
||||
Reference in New Issue
Block a user