123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /* test long rmap chains */
- #include "libcflat.h"
- #include "fwcfg.h"
- #include "vm.h"
- #include "smp.h"
- int main (void)
- {
- int i;
- int nr_pages;
- void *target_page, *virt_addr;
- setup_vm();
- nr_pages = fwcfg_get_u64(FW_CFG_RAM_SIZE) / PAGE_SIZE;
- nr_pages -= 1000;
- target_page = alloc_page();
- virt_addr = (void *) 0xfffffa000;
- for (i = 0; i < nr_pages; i++) {
- install_page(phys_to_virt(read_cr3()), virt_to_phys(target_page),
- virt_addr);
- virt_addr += PAGE_SIZE;
- }
- printf("created %d mappings\n", nr_pages);
- virt_addr = (void *) 0xfffffa000;
- for (i = 0; i < nr_pages; i++) {
- unsigned long *touch = virt_addr;
- *touch = 0;
- virt_addr += PAGE_SIZE;
- }
- printf("instantiated mappings\n");
- virt_addr += PAGE_SIZE;
- install_pte(phys_to_virt(read_cr3()), 1, virt_addr,
- 0 | PT_PRESENT_MASK | PT_WRITABLE_MASK, target_page);
- *(unsigned long *)virt_addr = 0;
- printf("PASS\n");
- return 0;
- }
|