replaced PAGE_ALIGN macro by PAGE_CEIL, PAGE_FLOOR pair
This commit is contained in:
parent
2923b1a7ed
commit
443ffdf012
4 changed files with 18 additions and 15 deletions
|
@ -64,6 +64,10 @@
|
|||
/// Mask the entry in a page table
|
||||
#define PAGE_ENTRY_MASK (-1L << (PAGE_SHIFT-PAGE_MAP_SHIFT))
|
||||
|
||||
/// Align to next page
|
||||
#define PAGE_FLOOR(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
|
||||
/// Align to page
|
||||
#define PAGE_CEIL(addr) ( (addr) & PAGE_MASK)
|
||||
/// Sign extension to get a valid canonical address (hack: by using aritmethic shifts)
|
||||
#define VIRT_SEXT(addr) ((ssize_t) addr << (BITS-VIRT_BITS) >> (BITS-VIRT_BITS))
|
||||
|
||||
|
@ -78,7 +82,6 @@
|
|||
#define PAGE_MAP_PGT 0xFFFFFF8000000000
|
||||
#endif
|
||||
|
||||
#define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
|
||||
/// Page is present
|
||||
#define PG_PRESENT (1 << 0)
|
||||
/// Page is read- and writable
|
||||
|
|
|
@ -562,13 +562,13 @@ int arch_paging_init(void)
|
|||
*/
|
||||
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MODS)) {
|
||||
multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr);
|
||||
npages = PAGE_ALIGN(mb_info->mods_count*sizeof(multiboot_module_t)) >> PAGE_SHIFT;
|
||||
npages = PAGE_FLOOR(mb_info->mods_count*sizeof(multiboot_module_t)) >> PAGE_SHIFT;
|
||||
|
||||
map_region((size_t) mmodule, (size_t) mmodule, npages, MAP_REMAP|MAP_KERNEL_SPACE);
|
||||
|
||||
for(i=0; i<mb_info->mods_count; i++, mmodule++) {
|
||||
// map physical address to the same virtual address
|
||||
npages = PAGE_ALIGN(mmodule->mod_end - mmodule->mod_start) >> PAGE_SHIFT;
|
||||
npages = PAGE_FLOOR(mmodule->mod_end - mmodule->mod_start) >> PAGE_SHIFT;
|
||||
kprintf("Map module %s at 0x%x (%u pages)\n", (char*)(size_t) mmodule->cmdline, mmodule->mod_start, npages);
|
||||
map_region((size_t) (mmodule->mod_start), (size_t) (mmodule->mod_start), npages, MAP_REMAP|MAP_KERNEL_SPACE);
|
||||
}
|
||||
|
|
|
@ -117,7 +117,7 @@ void buddy_dump()
|
|||
void* palloc(size_t sz, uint32_t flags)
|
||||
{
|
||||
size_t phyaddr, viraddr;
|
||||
uint32_t npages = PAGE_ALIGN(sz) >> PAGE_SHIFT;
|
||||
uint32_t npages = PAGE_FLOOR(sz) >> PAGE_SHIFT;
|
||||
|
||||
kprintf("palloc(%lu) (%lu pages)\n", sz, npages); // TODO: remove
|
||||
|
||||
|
@ -152,7 +152,7 @@ void pfree(void* addr, size_t sz)
|
|||
size_t i;
|
||||
size_t phyaddr;
|
||||
size_t viraddr = (size_t) addr & PAGE_MASK;
|
||||
uint32_t npages = PAGE_ALIGN(sz) >> PAGE_SHIFT;
|
||||
uint32_t npages = PAGE_FLOOR(sz) >> PAGE_SHIFT;
|
||||
|
||||
// memory is propably not continously mapped!
|
||||
for (i=0; i<npages; i++) {
|
||||
|
|
20
mm/memory.c
20
mm/memory.c
|
@ -273,8 +273,8 @@ int mmu_init(void)
|
|||
}
|
||||
|
||||
// add kernel to VMA list
|
||||
vma_add((size_t) &kernel_start & PAGE_MASK,
|
||||
PAGE_ALIGN((size_t) &kernel_end),
|
||||
vma_add(PAGE_CEIL((size_t) &kernel_start),
|
||||
PAGE_FLOOR((size_t) &kernel_end),
|
||||
VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE);
|
||||
|
||||
// add LAPIC tp VMA list
|
||||
|
@ -284,8 +284,8 @@ int mmu_init(void)
|
|||
|
||||
#if MAX_CORES > 1
|
||||
// reserve page for SMP boot code
|
||||
vma_add(SMP_SETUP_ADDR & PAGE_MASK,
|
||||
PAGE_ALIGN(SMP_SETUP_ADDR + PAGE_SIZE),
|
||||
vma_add(PAGE_CEIL(SMP_SETUP_ADDR),
|
||||
PAGE_FLOOR(SMP_SETUP_ADDR + PAGE_SIZE),
|
||||
VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE);
|
||||
#endif
|
||||
|
||||
|
@ -295,20 +295,20 @@ int mmu_init(void)
|
|||
* Therefore, we set these pages as used.
|
||||
*/
|
||||
if (mb_info) {
|
||||
vma_add((size_t) mb_info & PAGE_MASK,
|
||||
PAGE_ALIGN((size_t) mb_info + sizeof(multiboot_info_t)),
|
||||
vma_add(PAGE_CEIL((size_t) mb_info),
|
||||
PAGE_FLOOR((size_t) mb_info + sizeof(multiboot_info_t)),
|
||||
VMA_READ|VMA_CACHEABLE);
|
||||
|
||||
if (mb_info->flags & MULTIBOOT_INFO_MODS) {
|
||||
multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr);
|
||||
|
||||
vma_add((size_t) mb_info->mods_addr & PAGE_MASK,
|
||||
PAGE_ALIGN((size_t) mb_info->mods_addr + mb_info->mods_count*sizeof(multiboot_module_t)),
|
||||
vma_add(PAGE_CEIL((size_t) mb_info->mods_addr),
|
||||
PAGE_FLOOR((size_t) mb_info->mods_addr + mb_info->mods_count*sizeof(multiboot_module_t)),
|
||||
VMA_READ|VMA_CACHEABLE);
|
||||
|
||||
for(i=0; i<mb_info->mods_count; i++) {
|
||||
vma_add(PAGE_ALIGN(mmodule[i].mod_start),
|
||||
PAGE_ALIGN(mmodule[i].mod_end),
|
||||
vma_add(PAGE_CEIL(mmodule[i].mod_start),
|
||||
PAGE_FLOOR(mmodule[i].mod_end),
|
||||
VMA_READ|VMA_WRITE|VMA_CACHEABLE);
|
||||
|
||||
for(addr=mmodule[i].mod_start; addr<mmodule[i].mod_end; addr+=PAGE_SIZE) {
|
||||
|
|
Loading…
Add table
Reference in a new issue