standardized comment format and code cleanup
This commit is contained in:
parent
421e7ec66e
commit
aa1730919e
12 changed files with 45 additions and 59 deletions
|
@ -150,6 +150,7 @@ int create_page_map(task_t* task, int copy)
|
||||||
}
|
}
|
||||||
memset(pgt, 0x00, sizeof(page_map_t));
|
memset(pgt, 0x00, sizeof(page_map_t));
|
||||||
|
|
||||||
|
// copy kernel tables
|
||||||
spinlock_lock(&kslock);
|
spinlock_lock(&kslock);
|
||||||
|
|
||||||
for(i=0; i<MAP_ENTRIES; i++) {
|
for(i=0; i<MAP_ENTRIES; i++) {
|
||||||
|
@ -611,7 +612,7 @@ int print_paging_tree(size_t viraddr)
|
||||||
} else
|
} else
|
||||||
kputs("invalid page directory\n");
|
kputs("invalid page directory\n");
|
||||||
|
|
||||||
/* convert physical address to virtual */
|
// convert physical address to virtual
|
||||||
if (paging_enabled && pgt)
|
if (paging_enabled && pgt)
|
||||||
pgt = (page_map_t*) (KERNEL_SPACE - 1024*PAGE_SIZE + index1*PAGE_SIZE);
|
pgt = (page_map_t*) (KERNEL_SPACE - 1024*PAGE_SIZE + index1*PAGE_SIZE);
|
||||||
|
|
||||||
|
@ -688,11 +689,11 @@ int arch_paging_init(void)
|
||||||
page_map_t* pgt;
|
page_map_t* pgt;
|
||||||
size_t viraddr;
|
size_t viraddr;
|
||||||
|
|
||||||
// uninstall default handler and install our own
|
// replace default pagefault handler
|
||||||
irq_uninstall_handler(14);
|
irq_uninstall_handler(14);
|
||||||
irq_install_handler(14, pagefault_handler);
|
irq_install_handler(14, pagefault_handler);
|
||||||
|
|
||||||
// Create a page table to reference to the other page tables
|
// create a page table to reference to the other page tables
|
||||||
pgt = &pgt_container;
|
pgt = &pgt_container;
|
||||||
|
|
||||||
// map this table at the end of the kernel space
|
// map this table at the end of the kernel space
|
||||||
|
@ -714,8 +715,8 @@ int arch_paging_init(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set the page table and page directory entries for the kernel. We map the kernel's physical address
|
* Set the page table and page directory entries for the kernel.
|
||||||
* to the same virtual address.
|
* We map the kernel's physical address to the same virtual address.
|
||||||
*/
|
*/
|
||||||
npages = ((size_t) &kernel_end - (size_t) &kernel_start) >> PAGE_SHIFT;
|
npages = ((size_t) &kernel_end - (size_t) &kernel_start) >> PAGE_SHIFT;
|
||||||
if ((size_t)&kernel_end & (PAGE_SIZE-1))
|
if ((size_t)&kernel_end & (PAGE_SIZE-1))
|
||||||
|
@ -723,7 +724,7 @@ int arch_paging_init(void)
|
||||||
map_region((size_t)&kernel_start, (size_t)&kernel_start, npages, MAP_KERNEL_SPACE);
|
map_region((size_t)&kernel_start, (size_t)&kernel_start, npages, MAP_KERNEL_SPACE);
|
||||||
|
|
||||||
#if MAX_CORES > 1
|
#if MAX_CORES > 1
|
||||||
// Reserve page for smp boot code
|
// reserve page for smp boot code
|
||||||
if (!map_region(SMP_SETUP_ADDR, SMP_SETUP_ADDR, 1, MAP_KERNEL_SPACE|MAP_NO_CACHE)) {
|
if (!map_region(SMP_SETUP_ADDR, SMP_SETUP_ADDR, 1, MAP_KERNEL_SPACE|MAP_NO_CACHE)) {
|
||||||
kputs("could not reserve page for smp boot code\n");
|
kputs("could not reserve page for smp boot code\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -741,9 +742,7 @@ int arch_paging_init(void)
|
||||||
map_region((size_t) mb_info & PAGE_MASK, (size_t) mb_info & PAGE_MASK, 1, MAP_KERNEL_SPACE);
|
map_region((size_t) mb_info & PAGE_MASK, (size_t) mb_info & PAGE_MASK, 1, MAP_KERNEL_SPACE);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/*
|
// map reserved memory regions into the kernel space
|
||||||
* Map reserved memory regions into the kernel space
|
|
||||||
*/
|
|
||||||
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MEM_MAP)) {
|
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MEM_MAP)) {
|
||||||
multiboot_memory_map_t* mmap = (multiboot_memory_map_t*) mb_info->mmap_addr;
|
multiboot_memory_map_t* mmap = (multiboot_memory_map_t*) mb_info->mmap_addr;
|
||||||
multiboot_memory_map_t* mmap_end = (void*) ((size_t) mb_info->mmap_addr + mb_info->mmap_length);
|
multiboot_memory_map_t* mmap_end = (void*) ((size_t) mb_info->mmap_addr + mb_info->mmap_length);
|
||||||
|
@ -818,10 +817,7 @@ int arch_paging_init(void)
|
||||||
bootinfo->addr = viraddr;
|
bootinfo->addr = viraddr;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
// we turned on paging => now, we are able to register our task
|
||||||
* we turned on paging
|
|
||||||
* => now, we are able to register our task
|
|
||||||
*/
|
|
||||||
register_task();
|
register_task();
|
||||||
|
|
||||||
// APIC registers into the kernel address space
|
// APIC registers into the kernel address space
|
||||||
|
|
|
@ -515,7 +515,7 @@ int unmap_region(size_t viraddr, uint32_t npages)
|
||||||
index_pgd = (viraddr >> 21) & 0x1FF;
|
index_pgd = (viraddr >> 21) & 0x1FF;
|
||||||
index_pgt = (viraddr >> 12) & 0x1FF;
|
index_pgt = (viraddr >> 12) & 0x1FF;
|
||||||
|
|
||||||
// Currently, we allocate pages only in kernel space.
|
// currently, we allocate pages only in kernel space.
|
||||||
// => physical address of the page table is identical of the virtual address
|
// => physical address of the page table is identical of the virtual address
|
||||||
pdpt = (page_map_t*) (task->page_map->entries[index_pml4] & PAGE_MASK);
|
pdpt = (page_map_t*) (task->page_map->entries[index_pml4] & PAGE_MASK);
|
||||||
if (!pdpt) {
|
if (!pdpt) {
|
||||||
|
@ -644,8 +644,10 @@ static void pagefault_handler(struct state *s)
|
||||||
kprintf("Could not map 0x%x at 0x%x\n", phyaddr, viraddr);
|
kprintf("Could not map 0x%x at 0x%x\n", phyaddr, viraddr);
|
||||||
put_page(phyaddr);
|
put_page(phyaddr);
|
||||||
}
|
}
|
||||||
// handle missing paging structures for userspace
|
/*
|
||||||
// all kernel space paging structures have been initialized in entry64.asm
|
* handle missing paging structures for userspace
|
||||||
|
* all kernel space paging structures have been initialized in entry64.asm
|
||||||
|
*/
|
||||||
else if (viraddr >= PAGE_PGT) {
|
else if (viraddr >= PAGE_PGT) {
|
||||||
kprintf("map_region: missing paging structure at: 0x%lx (%s)\n", viraddr, map_to_lvlname(viraddr));
|
kprintf("map_region: missing paging structure at: 0x%lx (%s)\n", viraddr, map_to_lvlname(viraddr));
|
||||||
|
|
||||||
|
@ -683,7 +685,7 @@ int arch_paging_init(void)
|
||||||
{
|
{
|
||||||
uint32_t i, npages;
|
uint32_t i, npages;
|
||||||
|
|
||||||
// uninstall default handler and install our own
|
// replace default pagefault handler
|
||||||
irq_uninstall_handler(14);
|
irq_uninstall_handler(14);
|
||||||
irq_install_handler(14, pagefault_handler);
|
irq_install_handler(14, pagefault_handler);
|
||||||
|
|
||||||
|
@ -693,7 +695,7 @@ int arch_paging_init(void)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if MAX_CORES > 1
|
#if MAX_CORES > 1
|
||||||
// Reserve page for smp boot code
|
// reserve page for smp boot code
|
||||||
if (!map_region(SMP_SETUP_ADDR, SMP_SETUP_ADDR, 1, MAP_KERNEL_SPACE|MAP_NO_CACHE)) {
|
if (!map_region(SMP_SETUP_ADDR, SMP_SETUP_ADDR, 1, MAP_KERNEL_SPACE|MAP_NO_CACHE)) {
|
||||||
kputs("could not reserve page for smp boot code\n");
|
kputs("could not reserve page for smp boot code\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
@ -702,9 +704,7 @@ int arch_paging_init(void)
|
||||||
|
|
||||||
#ifdef CONFIG_MULTIBOOT
|
#ifdef CONFIG_MULTIBOOT
|
||||||
#if 0
|
#if 0
|
||||||
/*
|
// map reserved memory regions into the kernel space
|
||||||
* Map reserved memory regions into the kernel space
|
|
||||||
*/
|
|
||||||
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MEM_MAP)) {
|
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MEM_MAP)) {
|
||||||
multiboot_memory_map_t* mmap = (multiboot_memory_map_t*) mb_info->mmap_addr;
|
multiboot_memory_map_t* mmap = (multiboot_memory_map_t*) mb_info->mmap_addr;
|
||||||
multiboot_memory_map_t* mmap_end = (void*) ((size_t) mb_info->mmap_addr + mb_info->mmap_length);
|
multiboot_memory_map_t* mmap_end = (void*) ((size_t) mb_info->mmap_addr + mb_info->mmap_length);
|
||||||
|
@ -744,10 +744,7 @@ int arch_paging_init(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
// we turned on paging => now, we are able to register our task
|
||||||
* we turned on paging
|
|
||||||
* => now, we are able to register our task
|
|
||||||
*/
|
|
||||||
register_task();
|
register_task();
|
||||||
|
|
||||||
// APIC registers into the kernel address space
|
// APIC registers into the kernel address space
|
||||||
|
|
|
@ -253,7 +253,7 @@ static int initrd_open(fildes_t* file, const char* name)
|
||||||
/* opendir was called: */
|
/* opendir was called: */
|
||||||
if (name[0] == '\0')
|
if (name[0] == '\0')
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* open file was called: */
|
/* open file was called: */
|
||||||
if (!(file->flags & O_CREAT))
|
if (!(file->flags & O_CREAT))
|
||||||
return -ENOENT;
|
return -ENOENT;
|
||||||
|
@ -264,11 +264,11 @@ static int initrd_open(fildes_t* file, const char* name)
|
||||||
vfs_node_t* new_node = kmalloc(sizeof(vfs_node_t));
|
vfs_node_t* new_node = kmalloc(sizeof(vfs_node_t));
|
||||||
if (BUILTIN_EXPECT(!new_node, 0))
|
if (BUILTIN_EXPECT(!new_node, 0))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
blist = &file->node->block_list;
|
blist = &file->node->block_list;
|
||||||
dir_block_t* dir_block;
|
dir_block_t* dir_block;
|
||||||
dirent_t* dirent;
|
dirent_t* dirent;
|
||||||
|
|
||||||
memset(new_node, 0x00, sizeof(vfs_node_t));
|
memset(new_node, 0x00, sizeof(vfs_node_t));
|
||||||
new_node->type = FS_FILE;
|
new_node->type = FS_FILE;
|
||||||
new_node->read = &initrd_read;
|
new_node->read = &initrd_read;
|
||||||
|
@ -286,7 +286,7 @@ static int initrd_open(fildes_t* file, const char* name)
|
||||||
if (!dirent->vfs_node) {
|
if (!dirent->vfs_node) {
|
||||||
dirent->vfs_node = new_node;
|
dirent->vfs_node = new_node;
|
||||||
strncpy(dirent->name, (char*) name, MAX_FNAME);
|
strncpy(dirent->name, (char*) name, MAX_FNAME);
|
||||||
goto exit_create_file; // there might be a better Solution ***************
|
goto exit_create_file; // TODO: there might be a better Solution
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,10 +29,7 @@
|
||||||
#include <metalsvm/stddef.h>
|
#include <metalsvm/stddef.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
/**
|
/** @brief Sets up the environment, page directories etc and enables paging. */
|
||||||
* Sets up the environment, page directories etc and
|
|
||||||
* enables paging.
|
|
||||||
*/
|
|
||||||
static inline int paging_init(void) { return arch_paging_init(); }
|
static inline int paging_init(void) { return arch_paging_init(); }
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NULL ((void*) 0)
|
#define NULL ((void*) 0)
|
||||||
|
|
||||||
typedef unsigned int tid_t;
|
typedef unsigned int tid_t;
|
||||||
|
|
||||||
|
@ -62,10 +62,10 @@ typedef unsigned int tid_t;
|
||||||
irq_nested_enable(flags);\
|
irq_nested_enable(flags);\
|
||||||
return ret; \
|
return ret; \
|
||||||
}
|
}
|
||||||
#define CORE_ID smp_id()
|
#define CORE_ID smp_id()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* needed to find the task, which is currently running on this core */
|
// needed to find the task, which is currently running on this core
|
||||||
struct task;
|
struct task;
|
||||||
DECLARE_PER_CORE(struct task*, current_task);
|
DECLARE_PER_CORE(struct task*, current_task);
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,7 @@ unsigned long strtoul(const char* nptr, char** endptr, int base);
|
||||||
*/
|
*/
|
||||||
static inline int atoi(const char *str)
|
static inline int atoi(const char *str)
|
||||||
{
|
{
|
||||||
return (int)strtol(str, (char **)NULL, 10);
|
return (int)strtol(str, (char **) NULL, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -147,9 +147,7 @@ tid_t wait(int32_t* result);
|
||||||
*/
|
*/
|
||||||
void update_load(void);
|
void update_load(void);
|
||||||
|
|
||||||
/** @brief Print the current cpu load
|
/** @brief Print the current cpu load */
|
||||||
*
|
|
||||||
*/
|
|
||||||
void dump_load(void);
|
void dump_load(void);
|
||||||
|
|
||||||
#if MAX_CORES > 1
|
#if MAX_CORES > 1
|
||||||
|
@ -201,9 +199,7 @@ int block_current_task(void);
|
||||||
*/
|
*/
|
||||||
int set_timer(uint64_t deadline);
|
int set_timer(uint64_t deadline);
|
||||||
|
|
||||||
/** @brief check is a timer is expired
|
/** @brief check is a timer is expired */
|
||||||
*
|
|
||||||
*/
|
|
||||||
void check_timers(void);
|
void check_timers(void);
|
||||||
|
|
||||||
/** @brief Abort current task */
|
/** @brief Abort current task */
|
||||||
|
|
|
@ -63,7 +63,7 @@ extern const void bss_end;
|
||||||
int lowlevel_init(void)
|
int lowlevel_init(void)
|
||||||
{
|
{
|
||||||
// initialize .bss section
|
// initialize .bss section
|
||||||
memset((void*)&bss_start, 0x00, ((size_t) &bss_end - (size_t) &bss_start));
|
memset(&bss_start, 0x00, (char*) &bss_end - (char*) &bss_start);
|
||||||
|
|
||||||
koutput_init();
|
koutput_init();
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,7 @@ int main(void)
|
||||||
kprintf("This is MetalSVM %s Build %u, %u\n",
|
kprintf("This is MetalSVM %s Build %u, %u\n",
|
||||||
METALSVM_VERSION, &__BUILD_DATE, &__BUILD_TIME);
|
METALSVM_VERSION, &__BUILD_DATE, &__BUILD_TIME);
|
||||||
popbg();
|
popbg();
|
||||||
|
|
||||||
system_init();
|
system_init();
|
||||||
irq_init();
|
irq_init();
|
||||||
timer_init();
|
timer_init();
|
||||||
|
@ -86,7 +87,7 @@ int main(void)
|
||||||
icc_init();
|
icc_init();
|
||||||
svm_init();
|
svm_init();
|
||||||
#endif
|
#endif
|
||||||
initrd_init();
|
initrd_init();
|
||||||
|
|
||||||
irq_enable();
|
irq_enable();
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ static int sys_open(const char* name, int flags, int mode)
|
||||||
curr_task->fildes_table[fd] = NULL;
|
curr_task->fildes_table[fd] = NULL;
|
||||||
return check;
|
return check;
|
||||||
}
|
}
|
||||||
|
|
||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ DEFINE_PER_CORE(task_t*, current_task, task_table+0);
|
||||||
extern const void boot_stack;
|
extern const void boot_stack;
|
||||||
|
|
||||||
/** @brief helper function for the assembly code to determine the current task
|
/** @brief helper function for the assembly code to determine the current task
|
||||||
|
*
|
||||||
* @return Pointer to the task_t structure of current task
|
* @return Pointer to the task_t structure of current task
|
||||||
*/
|
*/
|
||||||
task_t* get_current_task(void) {
|
task_t* get_current_task(void) {
|
||||||
|
@ -193,8 +194,7 @@ static void wakeup_blocked_tasks(int result)
|
||||||
spinlock_irqsave_unlock(&table_lock);
|
spinlock_irqsave_unlock(&table_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief A procedure to be called by
|
/** @brief A procedure to be called by procedures which are called by exiting tasks. */
|
||||||
* procedures which are called by exiting tasks. */
|
|
||||||
static void NORETURN do_exit(int arg) {
|
static void NORETURN do_exit(int arg) {
|
||||||
vma_t* tmp;
|
vma_t* tmp;
|
||||||
task_t* curr_task = per_core(current_task);
|
task_t* curr_task = per_core(current_task);
|
||||||
|
@ -204,14 +204,14 @@ static void NORETURN do_exit(int arg) {
|
||||||
for (fd = 0; fd < NR_OPEN; fd++) {
|
for (fd = 0; fd < NR_OPEN; fd++) {
|
||||||
if(curr_task->fildes_table[fd] != NULL) {
|
if(curr_task->fildes_table[fd] != NULL) {
|
||||||
/*
|
/*
|
||||||
* delete a descriptor from the per-process object
|
* Delete a descriptor from the per-process object
|
||||||
* reference table. If this is not the last reference to the underlying
|
* reference table. If this is not the last reference to the underlying
|
||||||
* object, the object will be ignored.
|
* object, the object will be ignored.
|
||||||
*/
|
*/
|
||||||
if (curr_task->fildes_table[fd]->count == 1) {
|
if (curr_task->fildes_table[fd]->count == 1) {
|
||||||
/* try to close the file */
|
// try to close the file
|
||||||
status = close_fs(curr_task->fildes_table[fd]);
|
status = close_fs(curr_task->fildes_table[fd]);
|
||||||
/* close command failed -> return check = errno */
|
// close command failed -> return check = errno
|
||||||
if (BUILTIN_EXPECT(status < 0, 0))
|
if (BUILTIN_EXPECT(status < 0, 0))
|
||||||
kprintf("Task %u was not able to close file descriptor %i. close_fs returned %d", curr_task->id, fd, -status);
|
kprintf("Task %u was not able to close file descriptor %i. close_fs returned %d", curr_task->id, fd, -status);
|
||||||
kfree(curr_task->fildes_table[fd], sizeof(fildes_t));
|
kfree(curr_task->fildes_table[fd], sizeof(fildes_t));
|
||||||
|
@ -247,7 +247,7 @@ static void NORETURN do_exit(int arg) {
|
||||||
#if 0
|
#if 0
|
||||||
if (atomic_int32_read(&curr_task->user_usage))
|
if (atomic_int32_read(&curr_task->user_usage))
|
||||||
kprintf("Memory leak! Task %d did not release %d pages\n",
|
kprintf("Memory leak! Task %d did not release %d pages\n",
|
||||||
curr_task->id, atomic_int32_read(&curr_task->user_usage));
|
curr_task->id, atomic_int32_read(&curr_task->user_usage));
|
||||||
#endif
|
#endif
|
||||||
curr_task->status = TASK_FINISHED;
|
curr_task->status = TASK_FINISHED;
|
||||||
|
|
||||||
|
@ -412,6 +412,7 @@ int sys_fork(void)
|
||||||
|
|
||||||
spinlock_init(&task_table[i].vma_lock);
|
spinlock_init(&task_table[i].vma_lock);
|
||||||
|
|
||||||
|
// init fildes_table
|
||||||
// copy VMA list
|
// copy VMA list
|
||||||
child = &task_table[i].vma_list;
|
child = &task_table[i].vma_list;
|
||||||
parent = parent_task->vma_list;
|
parent = parent_task->vma_list;
|
||||||
|
@ -434,7 +435,6 @@ int sys_fork(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* init fildes_table */
|
|
||||||
task_table[i].fildes_table = kmalloc(sizeof(filp_t)*NR_OPEN);
|
task_table[i].fildes_table = kmalloc(sizeof(filp_t)*NR_OPEN);
|
||||||
memcpy(task_table[i].fildes_table, parent_task->fildes_table, sizeof(filp_t)*NR_OPEN);
|
memcpy(task_table[i].fildes_table, parent_task->fildes_table, sizeof(filp_t)*NR_OPEN);
|
||||||
for (fd_i = 0; fd_i < NR_OPEN; fd_i++)
|
for (fd_i = 0; fd_i < NR_OPEN; fd_i++)
|
||||||
|
|
|
@ -248,7 +248,6 @@ int mmu_init(void)
|
||||||
page_set_mark((size_t)bootinfo >> PAGE_SHIFT);
|
page_set_mark((size_t)bootinfo >> PAGE_SHIFT);
|
||||||
atomic_int32_inc(&total_allocated_pages);
|
atomic_int32_inc(&total_allocated_pages);
|
||||||
atomic_int32_dec(&total_available_pages);
|
atomic_int32_dec(&total_available_pages);
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Currently, MetalSVM supports only the Multiboot specification or the RockCreek processor!
|
#error Currently, MetalSVM supports only the Multiboot specification or the RockCreek processor!
|
||||||
#endif
|
#endif
|
||||||
|
@ -318,8 +317,8 @@ int mmu_init(void)
|
||||||
* The init ram disk are already loaded.
|
* The init ram disk are already loaded.
|
||||||
* Therefore, we set these pages as used.
|
* Therefore, we set these pages as used.
|
||||||
*/
|
*/
|
||||||
for(addr=bootinfo->addr; addr < bootinfo->addr+bootinfo->size; addr+=PAGE_SIZE) {
|
for(addr=bootinfo->addr; addr<bootinfo->addr+bootinfo->size; addr+=PAGE_SIZE) {
|
||||||
// This area is already mapped, so we need to virt_to_phys() these addresses.
|
// this area is already mapped, so we need to virt_to_phys() these addresses.
|
||||||
page_set_mark(virt_to_phys(addr) >> PAGE_SHIFT);
|
page_set_mark(virt_to_phys(addr) >> PAGE_SHIFT);
|
||||||
atomic_int32_inc(&total_allocated_pages);
|
atomic_int32_inc(&total_allocated_pages);
|
||||||
atomic_int32_dec(&total_available_pages);
|
atomic_int32_dec(&total_available_pages);
|
||||||
|
|
Loading…
Add table
Reference in a new issue