17d36db35SAvi Kivity /* test long rmap chains */ 27d36db35SAvi Kivity 37d36db35SAvi Kivity #include "libcflat.h" 4002d1830SGleb Natapov #include "fwcfg.h" 57d36db35SAvi Kivity #include "vm.h" 6*dcda215bSPaolo Bonzini #include "vmalloc.h" 77d36db35SAvi Kivity #include "smp.h" 85aca024eSPaolo Bonzini #include "alloc_page.h" 97d36db35SAvi Kivity main(void)107d36db35SAvi Kivityint main (void) 117d36db35SAvi Kivity { 127d36db35SAvi Kivity int i; 137d36db35SAvi Kivity int nr_pages; 147d36db35SAvi Kivity void *target_page, *virt_addr; 157d36db35SAvi Kivity 167d36db35SAvi Kivity setup_vm(); 177d36db35SAvi Kivity 18002d1830SGleb Natapov nr_pages = fwcfg_get_u64(FW_CFG_RAM_SIZE) / PAGE_SIZE; 197d36db35SAvi Kivity nr_pages -= 1000; 207d36db35SAvi Kivity target_page = alloc_page(); 217d36db35SAvi Kivity 227d36db35SAvi Kivity virt_addr = (void *) 0xfffffa000; 237d36db35SAvi Kivity for (i = 0; i < nr_pages; i++) { 247d36db35SAvi Kivity install_page(phys_to_virt(read_cr3()), virt_to_phys(target_page), 257d36db35SAvi Kivity virt_addr); 267d36db35SAvi Kivity virt_addr += PAGE_SIZE; 277d36db35SAvi Kivity } 287d36db35SAvi Kivity printf("created %d mappings\n", nr_pages); 297d36db35SAvi Kivity 307d36db35SAvi Kivity virt_addr = (void *) 0xfffffa000; 317d36db35SAvi Kivity for (i = 0; i < nr_pages; i++) { 327d36db35SAvi Kivity unsigned long *touch = virt_addr; 337d36db35SAvi Kivity 347d36db35SAvi Kivity *touch = 0; 357d36db35SAvi Kivity virt_addr += PAGE_SIZE; 367d36db35SAvi Kivity } 377d36db35SAvi Kivity printf("instantiated mappings\n"); 387d36db35SAvi Kivity 397d36db35SAvi Kivity virt_addr += PAGE_SIZE; 407d36db35SAvi Kivity install_pte(phys_to_virt(read_cr3()), 1, virt_addr, 41d10d16e1SAlexander Gordeev 0 | PT_PRESENT_MASK | PT_WRITABLE_MASK, target_page); 427d36db35SAvi Kivity 437d36db35SAvi Kivity *(unsigned long *)virt_addr = 0; 447d36db35SAvi Kivity printf("PASS\n"); 457d36db35SAvi Kivity 467d36db35SAvi Kivity return 0; 477d36db35SAvi Kivity } 48