forked from xuos/xiuos
				
			Fix softkernel uint32_t.
This commit is contained in:
		
							parent
							
								
									b6dd58c629
								
							
						
					
					
						commit
						79d741e015
					
				| 
						 | 
					@ -57,25 +57,25 @@ Modification:
 | 
				
			||||||
struct KPage {
 | 
					struct KPage {
 | 
				
			||||||
    struct double_list_node node;
 | 
					    struct double_list_node node;
 | 
				
			||||||
    union {
 | 
					    union {
 | 
				
			||||||
        uint32_t order;
 | 
					        uintptr_t order;
 | 
				
			||||||
        struct KPage* page_node;
 | 
					        struct KPage* page_node;
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    uintptr_t mapped_addr;
 | 
					    uintptr_t mapped_addr;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct KFreeList {
 | 
					struct KFreeList {
 | 
				
			||||||
    uint32_t n_free_pages;
 | 
					    uintptr_t n_free_pages;
 | 
				
			||||||
    struct double_list_node list_head;
 | 
					    struct double_list_node list_head;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct KBuddy {
 | 
					struct KBuddy {
 | 
				
			||||||
    uint32_t n_pages;
 | 
					    uintptr_t n_pages;
 | 
				
			||||||
    uint32_t use_lock;
 | 
					    uintptr_t use_lock;
 | 
				
			||||||
    struct spinlock lock;
 | 
					    struct spinlock lock;
 | 
				
			||||||
    struct KFreeList free_list[MAX_BUDDY_ORDER];
 | 
					    struct KFreeList free_list[MAX_BUDDY_ORDER];
 | 
				
			||||||
    struct KPage* first_page;
 | 
					    struct KPage* first_page;
 | 
				
			||||||
    uint32_t mem_start;
 | 
					    uintptr_t mem_start;
 | 
				
			||||||
    uint32_t mem_end;
 | 
					    uintptr_t mem_end;
 | 
				
			||||||
    struct KPage* pages;
 | 
					    struct KPage* pages;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,15 +88,15 @@ struct KBuddy {
 | 
				
			||||||
 * @param mem_end  free memory region end
 | 
					 * @param mem_end  free memory region end
 | 
				
			||||||
 * @return void
 | 
					 * @return void
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
bool KBuddyInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end);
 | 
					bool KBuddyInit(struct KBuddy* pbuddy, uintptr_t mem_start, uintptr_t mem_end);
 | 
				
			||||||
void KBuddySysInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end);
 | 
					void KBuddySysInit(struct KBuddy* pbuddy, uintptr_t mem_start, uintptr_t mem_end);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Continuous pages alloc by size
 | 
					 * Continuous pages alloc by size
 | 
				
			||||||
 * @param  size(uint32_t) size of need alloc
 | 
					 * @param  size(uintptr_t) size of need alloc
 | 
				
			||||||
 * @return NULL or v_addr (char*) return NULL if alloc failed, or return virtual page's addr
 | 
					 * @return NULL or v_addr (char*) return NULL if alloc failed, or return virtual page's addr
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
char* KBuddyAlloc(struct KBuddy* pbuddy, uint32_t size);
 | 
					char* KBuddyAlloc(struct KBuddy* pbuddy, uintptr_t size);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Continuous pages free from vaddr
 | 
					 * Continuous pages free from vaddr
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -42,8 +42,11 @@ Modification:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "memlayout.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ELF_MAGIC 0x464C457FU // "\x7FELF" in little endian
 | 
					#define ELF_MAGIC 0x464C457FU // "\x7FELF" in little endian
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if (ARCH_BIT == 32)
 | 
				
			||||||
// File header
 | 
					// File header
 | 
				
			||||||
struct elfhdr {
 | 
					struct elfhdr {
 | 
				
			||||||
    uint32_t magic; // must equal ELF_MAGIC
 | 
					    uint32_t magic; // must equal ELF_MAGIC
 | 
				
			||||||
| 
						 | 
					@ -51,9 +54,9 @@ struct elfhdr {
 | 
				
			||||||
    uint16_t type;
 | 
					    uint16_t type;
 | 
				
			||||||
    uint16_t machine;
 | 
					    uint16_t machine;
 | 
				
			||||||
    uint32_t version;
 | 
					    uint32_t version;
 | 
				
			||||||
    uint32_t entry;
 | 
					    uintptr_t entry;
 | 
				
			||||||
    uint32_t phoff;
 | 
					    uintptr_t phoff;
 | 
				
			||||||
    uint32_t shoff;
 | 
					    uintptr_t shoff;
 | 
				
			||||||
    uint32_t flags;
 | 
					    uint32_t flags;
 | 
				
			||||||
    uint16_t ehsize;
 | 
					    uint16_t ehsize;
 | 
				
			||||||
    uint16_t phentsize;
 | 
					    uint16_t phentsize;
 | 
				
			||||||
| 
						 | 
					@ -74,6 +77,37 @@ struct proghdr {
 | 
				
			||||||
    uint32_t flags;
 | 
					    uint32_t flags;
 | 
				
			||||||
    uint32_t align;
 | 
					    uint32_t align;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					#elif (ARCH_BIT == 64)
 | 
				
			||||||
 | 
					struct elfhdr {
 | 
				
			||||||
 | 
					    uint magic; // must equal ELF_MAGIC
 | 
				
			||||||
 | 
					    uchar elf[12];
 | 
				
			||||||
 | 
					    ushort type;
 | 
				
			||||||
 | 
					    ushort machine;
 | 
				
			||||||
 | 
					    uint version;
 | 
				
			||||||
 | 
					    uint64 entry;
 | 
				
			||||||
 | 
					    uint64 phoff;
 | 
				
			||||||
 | 
					    uint64 shoff;
 | 
				
			||||||
 | 
					    uint flags;
 | 
				
			||||||
 | 
					    ushort ehsize;
 | 
				
			||||||
 | 
					    ushort phentsize;
 | 
				
			||||||
 | 
					    ushort phnum;
 | 
				
			||||||
 | 
					    ushort shentsize;
 | 
				
			||||||
 | 
					    ushort shnum;
 | 
				
			||||||
 | 
					    ushort shstrndx;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Program section header
 | 
				
			||||||
 | 
					struct proghdr {
 | 
				
			||||||
 | 
					    uint32 type;
 | 
				
			||||||
 | 
					    uint32 flags;
 | 
				
			||||||
 | 
					    uint64 off;
 | 
				
			||||||
 | 
					    uint64 vaddr;
 | 
				
			||||||
 | 
					    uint64 paddr;
 | 
				
			||||||
 | 
					    uint64 filesz;
 | 
				
			||||||
 | 
					    uint64 memsz;
 | 
				
			||||||
 | 
					    uint64 align;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Values for Proghdr type
 | 
					// Values for Proghdr type
 | 
				
			||||||
#define ELF_PROG_LOAD 1
 | 
					#define ELF_PROG_LOAD 1
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,10 +32,10 @@ Modification:
 | 
				
			||||||
#include "pagetable.h"
 | 
					#include "pagetable.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool module_phymem_init();
 | 
					bool module_phymem_init();
 | 
				
			||||||
char* kalloc(uint32_t size);
 | 
					char* kalloc(size_t size);
 | 
				
			||||||
bool kfree(char* vaddr);
 | 
					bool kfree(char* vaddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char* raw_alloc(uint32_t size);
 | 
					char* raw_alloc(size_t size);
 | 
				
			||||||
bool raw_free(char* paddr);
 | 
					bool raw_free(char* paddr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void show_phymem_info();
 | 
					void show_phymem_info();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -39,8 +39,8 @@ Modification:
 | 
				
			||||||
#include "mmu_common.h"
 | 
					#include "mmu_common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// clang-format off
 | 
					// clang-format off
 | 
				
			||||||
#define ALIGNUP(sz, al)         (((uint32_t)(sz) + (uint32_t)(al) - 1) & ~((uint32_t)(al) - 1))
 | 
					#define ALIGNUP(sz, al)         (((uintptr_t)(sz) + (uintptr_t)(al) - 1) & ~((uintptr_t)(al) - 1))
 | 
				
			||||||
#define ALIGNDOWN(sz, al)       ((uint32_t)(sz) & ~((uint32_t)(al) - 1))
 | 
					#define ALIGNDOWN(sz, al)       ((uintptr_t)(sz) & ~((uintptr_t)(al) - 1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define LEVEL4_PTE_IDX(v)       (((uintptr_t)(v) >> LEVEL4_PTE_SHIFT) & (NUM_LEVEL4_PTE - 1))
 | 
					#define LEVEL4_PTE_IDX(v)       (((uintptr_t)(v) >> LEVEL4_PTE_SHIFT) & (NUM_LEVEL4_PTE - 1))
 | 
				
			||||||
#define LEVEL4_PTE_ADDR(v)      ALIGNDOWN(v, LEVEL4_PTE_SIZE)
 | 
					#define LEVEL4_PTE_ADDR(v)      ALIGNDOWN(v, LEVEL4_PTE_SIZE)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,7 @@ Modification:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct spinlock whole_kernel_lock;
 | 
					struct spinlock whole_kernel_lock;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern uint32_t _binary_init_start[], _binary_default_fs_start[];
 | 
					extern uintptr_t _binary_init_start[], _binary_default_fs_start[];
 | 
				
			||||||
extern int sys_spawn(char* img_start, char* name, char** argv);
 | 
					extern int sys_spawn(char* img_start, char* name, char** argv);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct TraceTag hardkernel_tag, softkernel_tag;
 | 
					static struct TraceTag hardkernel_tag, softkernel_tag;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,9 +32,9 @@ Modification:
 | 
				
			||||||
#include "kalloc.h"
 | 
					#include "kalloc.h"
 | 
				
			||||||
#include "log.h"
 | 
					#include "log.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void _buddy_split_page(struct KPage* page, uint32_t low_order, uint32_t high_order, struct KFreeList* list)
 | 
					static void _buddy_split_page(struct KPage* page, uintptr_t low_order, uintptr_t high_order, struct KFreeList* list)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t size = (1 << high_order);
 | 
					    uintptr_t size = (1 << high_order);
 | 
				
			||||||
    while (high_order > low_order) {
 | 
					    while (high_order > low_order) {
 | 
				
			||||||
        list--;
 | 
					        list--;
 | 
				
			||||||
        size >>= 1;
 | 
					        size >>= 1;
 | 
				
			||||||
| 
						 | 
					@ -57,14 +57,14 @@ __attribute__((always_inline)) static void inline _buddy_set_pages_order(struct
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__attribute__((always_inline)) static void inline _buddy_page_to_vaddr(struct KBuddy* pbuddy, struct KPage* page, char** vaddr)
 | 
					__attribute__((always_inline)) static void inline _buddy_page_to_vaddr(struct KBuddy* pbuddy, struct KPage* page, char** vaddr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t offset = page - pbuddy->pages;
 | 
					    uintptr_t offset = page - pbuddy->pages;
 | 
				
			||||||
    *vaddr = (char*)(pbuddy->mem_start + (offset << LEVEL4_PTE_SHIFT));
 | 
					    *vaddr = (char*)(pbuddy->mem_start + (offset << LEVEL4_PTE_SHIFT));
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__attribute__((always_inline)) static void inline _buddy_vaddr_to_page(struct KBuddy* pbuddy, struct KPage** page, char* vaddr)
 | 
					__attribute__((always_inline)) static void inline _buddy_vaddr_to_page(struct KBuddy* pbuddy, struct KPage** page, char* vaddr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t offset = (uint32_t)vaddr - pbuddy->mem_start;
 | 
					    uintptr_t offset = (uintptr_t)vaddr - pbuddy->mem_start;
 | 
				
			||||||
    *page = (struct KPage*)(pbuddy->pages + (offset >> LEVEL4_PTE_SHIFT));
 | 
					    *page = (struct KPage*)(pbuddy->pages + (offset >> LEVEL4_PTE_SHIFT));
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -109,9 +109,9 @@ static struct KPage* KBuddyPagesAlloc(struct KBuddy* pbuddy, int nPages)
 | 
				
			||||||
static void KBuddyPagesFree(struct KBuddy* pbuddy, struct KPage* page)
 | 
					static void KBuddyPagesFree(struct KBuddy* pbuddy, struct KPage* page)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct KPage* buddy = NULL;
 | 
					    struct KPage* buddy = NULL;
 | 
				
			||||||
    uint32_t order = (page->order >= MAX_BUDDY_ORDER) ? 0 : page->order;
 | 
					    uintptr_t order = (page->order >= MAX_BUDDY_ORDER) ? 0 : page->order;
 | 
				
			||||||
    uint32_t buddy_idx = 0, new_buddy_idx = 0;
 | 
					    uintptr_t buddy_idx = 0, new_buddy_idx = 0;
 | 
				
			||||||
    uint32_t page_idx = page - pbuddy->pages;
 | 
					    uintptr_t page_idx = page - pbuddy->pages;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (; order < MAX_BUDDY_ORDER - 1; order++) {
 | 
					    for (; order < MAX_BUDDY_ORDER - 1; order++) {
 | 
				
			||||||
        // find and delete buddy to combine
 | 
					        // find and delete buddy to combine
 | 
				
			||||||
| 
						 | 
					@ -139,7 +139,7 @@ static void KBuddyPagesFree(struct KBuddy* pbuddy, struct KPage* page)
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool KBuddyInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end)
 | 
					bool KBuddyInit(struct KBuddy* pbuddy, uintptr_t mem_start, uintptr_t mem_end)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    if (pbuddy->pages == NULL) {
 | 
					    if (pbuddy->pages == NULL) {
 | 
				
			||||||
        if ((pbuddy->pages = (struct KPage*)kalloc(((mem_end - mem_start) >> LEVEL4_PTE_SHIFT) * sizeof(struct KPage))) == NULL) {
 | 
					        if ((pbuddy->pages = (struct KPage*)kalloc(((mem_end - mem_start) >> LEVEL4_PTE_SHIFT) * sizeof(struct KPage))) == NULL) {
 | 
				
			||||||
| 
						 | 
					@ -148,7 +148,7 @@ bool KBuddyInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    uint32_t i = 0;
 | 
					    uintptr_t i = 0;
 | 
				
			||||||
    struct KPage* page = NULL;
 | 
					    struct KPage* page = NULL;
 | 
				
			||||||
    struct KFreeList* free_list = NULL;
 | 
					    struct KFreeList* free_list = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -160,7 +160,7 @@ bool KBuddyInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end)
 | 
				
			||||||
    pbuddy->mem_start = ALIGNUP(pbuddy->mem_start, 4 * PAGE_SIZE);
 | 
					    pbuddy->mem_start = ALIGNUP(pbuddy->mem_start, 4 * PAGE_SIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // total number of free pages
 | 
					    // total number of free pages
 | 
				
			||||||
    pbuddy->n_pages = (pbuddy->mem_end - (uint32_t)pbuddy->mem_start) >> LEVEL4_PTE_SHIFT;
 | 
					    pbuddy->n_pages = (pbuddy->mem_end - (uintptr_t)pbuddy->mem_start) >> LEVEL4_PTE_SHIFT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memset(pbuddy->pages, 0, pbuddy->n_pages);
 | 
					    memset(pbuddy->pages, 0, pbuddy->n_pages);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,7 +185,7 @@ bool KBuddyInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end)
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void KBuddySysInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end)
 | 
					void KBuddySysInit(struct KBuddy* pbuddy, uintptr_t mem_start, uintptr_t mem_end)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#define MAX_NR_PAGES MAX_NR_FREE_PAGES
 | 
					#define MAX_NR_PAGES MAX_NR_FREE_PAGES
 | 
				
			||||||
    static struct KPage kern_free_pages[MAX_NR_PAGES];
 | 
					    static struct KPage kern_free_pages[MAX_NR_PAGES];
 | 
				
			||||||
| 
						 | 
					@ -193,7 +193,7 @@ void KBuddySysInit(struct KBuddy* pbuddy, uint32_t mem_start, uint32_t mem_end)
 | 
				
			||||||
    KBuddyInit(pbuddy, mem_start, mem_end);
 | 
					    KBuddyInit(pbuddy, mem_start, mem_end);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char* KBuddyAlloc(struct KBuddy* pbuddy, uint32_t size)
 | 
					char* KBuddyAlloc(struct KBuddy* pbuddy, uintptr_t size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int nPages = CALCULATE_NPAGES(size);
 | 
					    int nPages = CALCULATE_NPAGES(size);
 | 
				
			||||||
    struct KPage* page = KBuddyPagesAlloc(pbuddy, nPages);
 | 
					    struct KPage* page = KBuddyPagesAlloc(pbuddy, nPages);
 | 
				
			||||||
| 
						 | 
					@ -210,15 +210,15 @@ bool KBuddyFree(struct KBuddy* pbuddy, char* vaddr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    struct KPage* page = NULL;
 | 
					    struct KPage* page = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((uint32_t)vaddr % (PAGE_SIZE)) {
 | 
					    if ((uintptr_t)vaddr % (PAGE_SIZE)) {
 | 
				
			||||||
        ERROR("kbuddyfree - unaligned: %x\n", vaddr);
 | 
					        ERROR("kbuddyfree - unaligned: %x\n", vaddr);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if ((uint32_t)vaddr < pbuddy->mem_start) {
 | 
					    if ((uintptr_t)vaddr < pbuddy->mem_start) {
 | 
				
			||||||
        ERROR("kbuddyfree - under buddy free page address: %x\n", vaddr);
 | 
					        ERROR("kbuddyfree - under buddy free page address: %x\n", vaddr);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if ((uint32_t)vaddr >= pbuddy->mem_end) {
 | 
					    if ((uintptr_t)vaddr >= pbuddy->mem_end) {
 | 
				
			||||||
        ERROR("kbuddyfree - over buddy free page address: %x\n", vaddr);
 | 
					        ERROR("kbuddyfree - over buddy free page address: %x\n", vaddr);
 | 
				
			||||||
        return false;
 | 
					        return false;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,19 +36,19 @@ Modification:
 | 
				
			||||||
struct KBuddy kern_virtmem_buddy;
 | 
					struct KBuddy kern_virtmem_buddy;
 | 
				
			||||||
struct KBuddy user_phy_freemem_buddy;
 | 
					struct KBuddy user_phy_freemem_buddy;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern uint32_t kernel_data_end[];
 | 
					extern uintptr_t kernel_data_end[];
 | 
				
			||||||
bool module_phymem_init()
 | 
					bool module_phymem_init()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    uint32_t kern_freemem_start = V2P(&kernel_data_end);
 | 
					    uintptr_t kern_freemem_start = V2P(&kernel_data_end);
 | 
				
			||||||
    uint32_t kern_freemem_end = PHY_USER_FREEMEM_BASE;
 | 
					    uintptr_t kern_freemem_end = PHY_USER_FREEMEM_BASE;
 | 
				
			||||||
    uint32_t user_freemem_start = PHY_USER_FREEMEM_BASE;
 | 
					    uintptr_t user_freemem_start = PHY_USER_FREEMEM_BASE;
 | 
				
			||||||
    uint32_t user_freemem_end = PHY_MEM_STOP;
 | 
					    uintptr_t user_freemem_end = PHY_MEM_STOP;
 | 
				
			||||||
    KBuddySysInit(&kern_virtmem_buddy, kern_freemem_start, kern_freemem_end);
 | 
					    KBuddySysInit(&kern_virtmem_buddy, kern_freemem_start, kern_freemem_end);
 | 
				
			||||||
    KBuddyInit(&user_phy_freemem_buddy, user_freemem_start, user_freemem_end);
 | 
					    KBuddyInit(&user_phy_freemem_buddy, user_freemem_start, user_freemem_end);
 | 
				
			||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char* kalloc(uint32_t size)
 | 
					char* kalloc(size_t size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char* mem_alloc = KBuddyAlloc(&kern_virtmem_buddy, size);
 | 
					    char* mem_alloc = KBuddyAlloc(&kern_virtmem_buddy, size);
 | 
				
			||||||
    if (mem_alloc == NULL) {
 | 
					    if (mem_alloc == NULL) {
 | 
				
			||||||
| 
						 | 
					@ -67,7 +67,7 @@ bool kfree(char* vaddr)
 | 
				
			||||||
    return KBuddyFree(&kern_virtmem_buddy, V2P_WO(vaddr));
 | 
					    return KBuddyFree(&kern_virtmem_buddy, V2P_WO(vaddr));
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char* raw_alloc(uint32_t size)
 | 
					char* raw_alloc(size_t size)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    char* mem_alloc = KBuddyAlloc(&user_phy_freemem_buddy, size);
 | 
					    char* mem_alloc = KBuddyAlloc(&user_phy_freemem_buddy, size);
 | 
				
			||||||
    if (mem_alloc == NULL) {
 | 
					    if (mem_alloc == NULL) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -57,7 +57,7 @@ static struct slab_allocator* SessionAllocator()
 | 
				
			||||||
static inline bool check_pages_unmapped(struct TaskMicroDescriptor* task, uintptr_t vaddr, int nr_pages)
 | 
					static inline bool check_pages_unmapped(struct TaskMicroDescriptor* task, uintptr_t vaddr, int nr_pages)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    static uintptr_t paddr = UINT32_MAX;
 | 
					    static uintptr_t paddr = UINT32_MAX;
 | 
				
			||||||
    for (uint32_t i = 0; i < nr_pages; i++) {
 | 
					    for (uintptr_t i = 0; i < nr_pages; i++) {
 | 
				
			||||||
        if ((paddr = xizi_pager.address_translate(&task->pgdir, vaddr)) != 0) {
 | 
					        if ((paddr = xizi_pager.address_translate(&task->pgdir, vaddr)) != 0) {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,7 +97,7 @@ void show_tasks(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern struct KBuddy user_phy_freemem_buddy;
 | 
					extern struct KBuddy user_phy_freemem_buddy;
 | 
				
			||||||
extern struct KBuddy kern_virtmem_buddy;
 | 
					extern struct KBuddy kern_virtmem_buddy;
 | 
				
			||||||
extern uint32_t kernel_data_end[];
 | 
					extern uintptr_t kernel_data_end[];
 | 
				
			||||||
void show_mem(void)
 | 
					void show_mem(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    SHOWINFO_BORDER_LINE();
 | 
					    SHOWINFO_BORDER_LINE();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue