Loading hw/xen/xen_pt.c +1 −1 Original line number Diff line number Diff line Loading @@ -736,7 +736,7 @@ static int xen_pt_initfn(PCIDevice *d) } out: memory_listener_register(&s->memory_listener, &address_space_memory); memory_listener_register(&s->memory_listener, &s->dev.bus_master_as); memory_listener_register(&s->io_listener, &address_space_io); XEN_PT_LOG(d, "Real physical device %02x:%02x.%d registered successfully!\n", Loading xen-hvm.c +24 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,12 @@ static inline ioreq_t *xen_vcpu_ioreq(shared_iopage_t *shared_page, int vcpu) #endif #define BUFFER_IO_MAX_DELAY 100 /* Leave some slack so that hvmloader does not complain about lack of * memory at boot time ("Could not allocate order=0 extent"). * Once hvmloader is modified to cope with that situation without * printing warning messages, QEMU_SPARE_PAGES can be removed. */ #define QEMU_SPARE_PAGES 16 typedef struct XenPhysmap { hwaddr start_addr; Loading Loading @@ -244,6 +250,8 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr) unsigned long nr_pfn; xen_pfn_t *pfn_list; int i; xc_domaininfo_t info; unsigned long free_pages; if (runstate_check(RUN_STATE_INMIGRATE)) { /* RAM already populated in Xen */ Loading @@ -266,6 +274,22 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr) pfn_list[i] = (ram_addr >> TARGET_PAGE_BITS) + i; } if ((xc_domain_getinfolist(xen_xc, xen_domid, 1, &info) != 1) || (info.domain != xen_domid)) { hw_error("xc_domain_getinfolist failed"); } free_pages = info.max_pages - info.tot_pages; if (free_pages > QEMU_SPARE_PAGES) { free_pages -= QEMU_SPARE_PAGES; } else { free_pages = 0; } if ((free_pages < nr_pfn) && (xc_domain_setmaxmem(xen_xc, xen_domid, ((info.max_pages + nr_pfn - free_pages) << (XC_PAGE_SHIFT - 10))) < 0)) { hw_error("xc_domain_setmaxmem failed"); } if (xc_domain_populate_physmap_exact(xen_xc, xen_domid, nr_pfn, 0, 0, pfn_list)) { hw_error("xen: failed to populate ram at " RAM_ADDR_FMT, ram_addr); } Loading Loading
hw/xen/xen_pt.c +1 −1 Original line number Diff line number Diff line Loading @@ -736,7 +736,7 @@ static int xen_pt_initfn(PCIDevice *d) } out: memory_listener_register(&s->memory_listener, &address_space_memory); memory_listener_register(&s->memory_listener, &s->dev.bus_master_as); memory_listener_register(&s->io_listener, &address_space_io); XEN_PT_LOG(d, "Real physical device %02x:%02x.%d registered successfully!\n", Loading
xen-hvm.c +24 −0 Original line number Diff line number Diff line Loading @@ -90,6 +90,12 @@ static inline ioreq_t *xen_vcpu_ioreq(shared_iopage_t *shared_page, int vcpu) #endif #define BUFFER_IO_MAX_DELAY 100 /* Leave some slack so that hvmloader does not complain about lack of * memory at boot time ("Could not allocate order=0 extent"). * Once hvmloader is modified to cope with that situation without * printing warning messages, QEMU_SPARE_PAGES can be removed. */ #define QEMU_SPARE_PAGES 16 typedef struct XenPhysmap { hwaddr start_addr; Loading Loading @@ -244,6 +250,8 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr) unsigned long nr_pfn; xen_pfn_t *pfn_list; int i; xc_domaininfo_t info; unsigned long free_pages; if (runstate_check(RUN_STATE_INMIGRATE)) { /* RAM already populated in Xen */ Loading @@ -266,6 +274,22 @@ void xen_ram_alloc(ram_addr_t ram_addr, ram_addr_t size, MemoryRegion *mr) pfn_list[i] = (ram_addr >> TARGET_PAGE_BITS) + i; } if ((xc_domain_getinfolist(xen_xc, xen_domid, 1, &info) != 1) || (info.domain != xen_domid)) { hw_error("xc_domain_getinfolist failed"); } free_pages = info.max_pages - info.tot_pages; if (free_pages > QEMU_SPARE_PAGES) { free_pages -= QEMU_SPARE_PAGES; } else { free_pages = 0; } if ((free_pages < nr_pfn) && (xc_domain_setmaxmem(xen_xc, xen_domid, ((info.max_pages + nr_pfn - free_pages) << (XC_PAGE_SHIFT - 10))) < 0)) { hw_error("xc_domain_setmaxmem failed"); } if (xc_domain_populate_physmap_exact(xen_xc, xen_domid, nr_pfn, 0, 0, pfn_list)) { hw_error("xen: failed to populate ram at " RAM_ADDR_FMT, ram_addr); } Loading