[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] hvmloader - allow_memory_relocate overlaps
I am wondering if the variable "allow_memory_relocate" is still relevant today and if its default value is still relevant. Should it be defined to 0 by default instead of 1 (it seems to be a workaround for qemu-traditional, so maybe an outdated default value ? ) ? Code extract: tools/firmware/hvmloader/pci.c " /* * Do we allow hvmloader to relocate guest memory in order to * increase the size of the lowmem MMIO hole? Defaulting to 1 * here will mean that non-libxl toolstacks (including xend and * home-grown ones) means that those using qemu-xen will still * experience the memory relocation bug described below; but it * also means that those using q emu-traditional will *not* * experience any change; and it also means that there is a * work-around for those using qemu-xen, namely switching to * qemu-traditional. * * If we defaulted to 0, and failing to resize the hole caused any * problems with qemu-traditional, then there is no work-around. * * Since xend can only use qemu-traditional, I think this is the * option that will have the least impact. */ bool allow_memory_relocate = 1; " " /* * At the moment qemu-xen can't deal with relocated memory regions. * It's too close to the release to make a proper fix; for now, * only allow t he MMIO hole to grow large enough to move guest memory * if we're running qemu-traditional. Items that don't fit will be * relocated into the 64-bit address space. * * This loop now does the following: * - If allow_memory_relocate, increase the MMIO hole until it's * big enough, or until it's 2GiB * - If !allow_memory_relocate, increase the MMIO hole until it's * big enough, or until it's 2GiB, or until it overlaps guest * memory */ while ( (mmio_total > (pci_mem_end - pci_mem_start)) && ((pci_mem_start << 1) != 0) && (allow_memory_relocate || (((pci_mem_start << 1) >> PAGE_SHIFT) >= hvm_info->low_mem_pgend)) ) pci_mem_start <<= 1; " The issue it cause is documented in the source code: guest memory can be trashed by the hvmloader. Due to this issue, it is impossible to passthrough a large PCI device to a HVM with a lot of ram. (https://github.com/QubesOS/qubes-issues/issues/4321). (Forcing "allow_memory_relocate" to be 0 seems to solve the issue linked) Thanks, Neowutran
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |