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