From patchwork Mon Jan 25 16:46:42 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jes Sorensen X-Patchwork-Id: 75062 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.2) with ESMTP id o0PGksWl008769 for ; Mon, 25 Jan 2010 16:46:54 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753502Ab0AYQqw (ORCPT ); Mon, 25 Jan 2010 11:46:52 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753498Ab0AYQqw (ORCPT ); Mon, 25 Jan 2010 11:46:52 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58858 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753497Ab0AYQqv (ORCPT ); Mon, 25 Jan 2010 11:46:51 -0500 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o0PGkjUX019181 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Mon, 25 Jan 2010 11:46:46 -0500 Received: from [10.36.8.164] (vpn2-8-164.ams2.redhat.com [10.36.8.164]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o0PGkhHZ025011; Mon, 25 Jan 2010 11:46:44 -0500 Message-ID: <4B5DCAF2.3010105@redhat.com> Date: Mon, 25 Jan 2010 17:46:42 +0100 From: Jes Sorensen User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091209 Fedora/3.0-4.fc12 Lightning/1.0pre Thunderbird/3.0 MIME-Version: 1.0 To: qemu-devel@nongnu.org CC: kvm@vger.kernel.org, "Kevin O'Connor" , Avi Kivity , Anthony Liguori Subject: [PATCH] Seabios - read e820 reserve from qemu_cfg X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Index: seabios/src/paravirt.c =================================================================== --- seabios.orig/src/paravirt.c +++ seabios/src/paravirt.c @@ -132,6 +132,15 @@ u16 qemu_cfg_smbios_entries(void) return cnt; } +int qemu_cfg_read_e820_reserve(struct qemu_cfg_e820_reserve *reserve) +{ + if (!qemu_cfg_present) + return 0; + + qemu_cfg_read((void *)reserve, sizeof(*reserve)); + return reserve->length; +} + struct smbios_header { u16 length; u8 type; Index: seabios/src/paravirt.h =================================================================== --- seabios.orig/src/paravirt.h +++ seabios/src/paravirt.h @@ -36,6 +36,7 @@ static inline int kvm_para_available(voi #define QEMU_CFG_ACPI_TABLES (QEMU_CFG_ARCH_LOCAL + 0) #define QEMU_CFG_SMBIOS_ENTRIES (QEMU_CFG_ARCH_LOCAL + 1) #define QEMU_CFG_IRQ0_OVERRIDE (QEMU_CFG_ARCH_LOCAL + 2) +#define QEMU_CFG_E820_RESERVE (QEMU_CFG_ARCH_LOCAL + 3) extern int qemu_cfg_present; @@ -61,8 +62,14 @@ typedef struct QemuCfgFile { char name[56]; } QemuCfgFile; +struct qemu_cfg_e820_reserve { + u32 addr; + u32 length; +}; + u16 qemu_cfg_first_file(QemuCfgFile *entry); u16 qemu_cfg_next_file(QemuCfgFile *entry); u32 qemu_cfg_read_file(QemuCfgFile *entry, void *dst, u32 maxlen); +int qemu_cfg_read_e820_reserve(struct qemu_cfg_e820_reserve *reserve); #endif Index: seabios/src/post.c =================================================================== --- seabios.orig/src/post.c +++ seabios/src/post.c @@ -135,10 +135,16 @@ ram_probe(void) , E820_RESERVED); add_e820(BUILD_BIOS_ADDR, BUILD_BIOS_SIZE, E820_RESERVED); - if (kvm_para_available()) - // 4 pages before the bios, 3 pages for vmx tss pages, the - // other page for EPT real mode pagetable - add_e820(0xfffbc000, 4*4096, E820_RESERVED); + if (kvm_para_available()) { + struct qemu_cfg_e820_reserve e820_reserve; + if (qemu_cfg_read_e820_reserve(&e820_reserve)) + add_e820(e820_reserve.addr, e820_reserve.length, E820_RESERVED); + else { + // 4 pages before the bios, 3 pages for vmx tss pages, the + // other page for EPT real mode pagetable + add_e820(0xfffbc000, 4*4096, E820_RESERVED); + } + } dprintf(1, "Ram Size=0x%08x (0x%08x%08x high)\n" , RamSize, (u32)(RamSizeOver4G >> 32), (u32)RamSizeOver4G);