xref: /kvm-unit-tests/x86/rmap_chain.c (revision 5aca024ecf2c01430d0993df439374c46c6f2a29)
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