From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43954) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W7SAA-0004eA-4w for qemu-devel@nongnu.org; Sun, 26 Jan 2014 11:02:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W7SA4-00010y-34 for qemu-devel@nongnu.org; Sun, 26 Jan 2014 11:02:22 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57343) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W7SA3-00010n-SB for qemu-devel@nongnu.org; Sun, 26 Jan 2014 11:02:16 -0500 Date: Sun, 26 Jan 2014 18:07:09 +0200 From: "Michael S. Tsirkin" Message-ID: <1390735289-15563-35-git-send-email-mst@redhat.com> References: <1390735289-15563-1-git-send-email-mst@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1390735289-15563-1-git-send-email-mst@redhat.com> Subject: [Qemu-devel] [PULL v2 34/35] q35: document gigabyte_align List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Anthony Liguori Document the logic behind the below/above 4G split. Signed-off-by: Michael S. Tsirkin --- hw/i386/pc_q35.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 7104645..a7f6260 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -51,6 +51,10 @@ static bool has_pci_info; static bool has_acpi_build = true; static bool smbios_type1_defaults = true; +/* Make sure that guest addresses aligned at 1Gbyte boundaries get mapped to + * host addresses aligned at 1Gbyte boundaries. This way we can use 1GByte + * pages in the host. + */ static bool gigabyte_align = true; /* PC hardware initialisation */ @@ -93,6 +97,15 @@ static void pc_q35_init(QEMUMachineInitArgs *args) kvmclock_create(); + /* Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory + * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping + * also known as MMCFG). + * If it doesn't, we need to split it in chunks below and above 4G. + * In any case, try to make sure that guest addresses aligned at + * 1G boundaries get mapped to host addresses aligned at 1G boundaries. + * For old machine types, use whatever split we used historically to avoid + * breaking migration. + */ if (args->ram_size >= 0xb0000000) { ram_addr_t lowmem = gigabyte_align ? 0x80000000 : 0xb0000000; above_4g_mem_size = args->ram_size - lowmem; -- MST