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
|
/// Mask the entry in a page table
|
||||||
#define PAGE_ENTRY_MASK (-1L << (PAGE_SHIFT-PAGE_MAP_SHIFT))
|
#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)
|
/// 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))
|
#define VIRT_SEXT(addr) ((ssize_t) addr << (BITS-VIRT_BITS) >> (BITS-VIRT_BITS))
|
||||||
|
|
||||||
|
@ -78,7 +82,6 @@
|
||||||
#define PAGE_MAP_PGT 0xFFFFFF8000000000
|
#define PAGE_MAP_PGT 0xFFFFFF8000000000
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PAGE_ALIGN(addr) (((addr) + PAGE_SIZE - 1) & PAGE_MASK)
|
|
||||||
/// Page is present
|
/// Page is present
|
||||||
#define PG_PRESENT (1 << 0)
|
#define PG_PRESENT (1 << 0)
|
||||||
/// Page is read- and writable
|
/// Page is read- and writable
|
||||||
|
|
|
@ -562,13 +562,13 @@ int arch_paging_init(void)
|
||||||
*/
|
*/
|
||||||
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MODS)) {
|
if (mb_info && (mb_info->flags & MULTIBOOT_INFO_MODS)) {
|
||||||
multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr);
|
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);
|
map_region((size_t) mmodule, (size_t) mmodule, npages, MAP_REMAP|MAP_KERNEL_SPACE);
|
||||||
|
|
||||||
for(i=0; i<mb_info->mods_count; i++, mmodule++) {
|
for(i=0; i<mb_info->mods_count; i++, mmodule++) {
|
||||||
// map physical address to the same virtual address
|
// 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);
|
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);
|
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)
|
void* palloc(size_t sz, uint32_t flags)
|
||||||
{
|
{
|
||||||
size_t phyaddr, viraddr;
|
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
|
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 i;
|
||||||
size_t phyaddr;
|
size_t phyaddr;
|
||||||
size_t viraddr = (size_t) addr & PAGE_MASK;
|
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!
|
// memory is propably not continously mapped!
|
||||||
for (i=0; i<npages; i++) {
|
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
|
// add kernel to VMA list
|
||||||
vma_add((size_t) &kernel_start & PAGE_MASK,
|
vma_add(PAGE_CEIL((size_t) &kernel_start),
|
||||||
PAGE_ALIGN((size_t) &kernel_end),
|
PAGE_FLOOR((size_t) &kernel_end),
|
||||||
VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE);
|
VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE);
|
||||||
|
|
||||||
// add LAPIC tp VMA list
|
// add LAPIC tp VMA list
|
||||||
|
@ -284,8 +284,8 @@ int mmu_init(void)
|
||||||
|
|
||||||
#if MAX_CORES > 1
|
#if MAX_CORES > 1
|
||||||
// reserve page for SMP boot code
|
// reserve page for SMP boot code
|
||||||
vma_add(SMP_SETUP_ADDR & PAGE_MASK,
|
vma_add(PAGE_CEIL(SMP_SETUP_ADDR),
|
||||||
PAGE_ALIGN(SMP_SETUP_ADDR + PAGE_SIZE),
|
PAGE_FLOOR(SMP_SETUP_ADDR + PAGE_SIZE),
|
||||||
VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE);
|
VMA_READ|VMA_WRITE|VMA_EXECUTE|VMA_CACHEABLE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -295,20 +295,20 @@ int mmu_init(void)
|
||||||
* Therefore, we set these pages as used.
|
* Therefore, we set these pages as used.
|
||||||
*/
|
*/
|
||||||
if (mb_info) {
|
if (mb_info) {
|
||||||
vma_add((size_t) mb_info & PAGE_MASK,
|
vma_add(PAGE_CEIL((size_t) mb_info),
|
||||||
PAGE_ALIGN((size_t) mb_info + sizeof(multiboot_info_t)),
|
PAGE_FLOOR((size_t) mb_info + sizeof(multiboot_info_t)),
|
||||||
VMA_READ|VMA_CACHEABLE);
|
VMA_READ|VMA_CACHEABLE);
|
||||||
|
|
||||||
if (mb_info->flags & MULTIBOOT_INFO_MODS) {
|
if (mb_info->flags & MULTIBOOT_INFO_MODS) {
|
||||||
multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr);
|
multiboot_module_t* mmodule = (multiboot_module_t*) ((size_t) mb_info->mods_addr);
|
||||||
|
|
||||||
vma_add((size_t) mb_info->mods_addr & PAGE_MASK,
|
vma_add(PAGE_CEIL((size_t) mb_info->mods_addr),
|
||||||
PAGE_ALIGN((size_t) mb_info->mods_addr + mb_info->mods_count*sizeof(multiboot_module_t)),
|
PAGE_FLOOR((size_t) mb_info->mods_addr + mb_info->mods_count*sizeof(multiboot_module_t)),
|
||||||
VMA_READ|VMA_CACHEABLE);
|
VMA_READ|VMA_CACHEABLE);
|
||||||
|
|
||||||
for(i=0; i<mb_info->mods_count; i++) {
|
for(i=0; i<mb_info->mods_count; i++) {
|
||||||
vma_add(PAGE_ALIGN(mmodule[i].mod_start),
|
vma_add(PAGE_CEIL(mmodule[i].mod_start),
|
||||||
PAGE_ALIGN(mmodule[i].mod_end),
|
PAGE_FLOOR(mmodule[i].mod_end),
|
||||||
VMA_READ|VMA_WRITE|VMA_CACHEABLE);
|
VMA_READ|VMA_WRITE|VMA_CACHEABLE);
|
||||||
|
|
||||||
for(addr=mmodule[i].mod_start; addr<mmodule[i].mod_end; addr+=PAGE_SIZE) {
|
for(addr=mmodule[i].mod_start; addr<mmodule[i].mod_end; addr+=PAGE_SIZE) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue