All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jes Sorensen <Jes.Sorensen@redhat.com>
To: qemu-devel@nongnu.org
Cc: kvm@vger.kernel.org, "Kevin O'Connor" <kevin@koconnor.net>,
	Avi Kivity <avi@redhat.com>,
	Anthony Liguori <aliguori@us.ibm.com>
Subject: [PATCH] Seabios - read e820 reserve from qemu_cfg
Date: Mon, 25 Jan 2010 17:46:42 +0100	[thread overview]
Message-ID: <4B5DCAF2.3010105@redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 547 bytes --]

Hi,

Right now KVM/QEMU relies on hard coded values in Seabios for the
reserved area for the TSS pages and the EPT page.

I'd like to suggest we change this to pass the value from QEMU via
qemu-cfg making it possible to move it around dynamically in the future.

Attached is a patch to Seabios for this, which defaults to the current
hard coded value if no value is provided by qemu-cfg. We can remove
the backwards compatibility later.

I'll post the QEMU patches for upstream QEMU and QEMU-KVM in a minute.

Comments most welcome!

Cheers,
Jes


[-- Attachment #2: 0005-kvm-e820-reserve.patch --]
[-- Type: text/plain, Size: 2953 bytes --]

Read location and size of KVM switch area from qemu-cfg

Read location of KVM's switch area (VMX TSS pages and EPT) from QEMU
via qemu-cfg instead of relying on hard coded values.

For now, fall back to the old hard coded values for compatibility
reasons. Compatibility code can be removed in the future.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>

---
 src/paravirt.c |    9 +++++++++
 src/paravirt.h |    7 +++++++
 src/post.c     |   14 ++++++++++----
 3 files changed, 26 insertions(+), 4 deletions(-)

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);

WARNING: multiple messages have this Message-ID (diff)
From: Jes Sorensen <Jes.Sorensen@redhat.com>
To: qemu-devel@nongnu.org
Cc: Anthony Liguori <aliguori@us.ibm.com>,
	Kevin O'Connor <kevin@koconnor.net>, Avi Kivity <avi@redhat.com>,
	kvm@vger.kernel.org
Subject: [Qemu-devel] [PATCH] Seabios - read e820 reserve from qemu_cfg
Date: Mon, 25 Jan 2010 17:46:42 +0100	[thread overview]
Message-ID: <4B5DCAF2.3010105@redhat.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 547 bytes --]

Hi,

Right now KVM/QEMU relies on hard coded values in Seabios for the
reserved area for the TSS pages and the EPT page.

I'd like to suggest we change this to pass the value from QEMU via
qemu-cfg making it possible to move it around dynamically in the future.

Attached is a patch to Seabios for this, which defaults to the current
hard coded value if no value is provided by qemu-cfg. We can remove
the backwards compatibility later.

I'll post the QEMU patches for upstream QEMU and QEMU-KVM in a minute.

Comments most welcome!

Cheers,
Jes


[-- Attachment #2: 0005-kvm-e820-reserve.patch --]
[-- Type: text/plain, Size: 2953 bytes --]

Read location and size of KVM switch area from qemu-cfg

Read location of KVM's switch area (VMX TSS pages and EPT) from QEMU
via qemu-cfg instead of relying on hard coded values.

For now, fall back to the old hard coded values for compatibility
reasons. Compatibility code can be removed in the future.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>

---
 src/paravirt.c |    9 +++++++++
 src/paravirt.h |    7 +++++++
 src/post.c     |   14 ++++++++++----
 3 files changed, 26 insertions(+), 4 deletions(-)

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);

             reply	other threads:[~2010-01-25 16:46 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-25 16:46 Jes Sorensen [this message]
2010-01-25 16:46 ` [Qemu-devel] [PATCH] Seabios - read e820 reserve from qemu_cfg Jes Sorensen
2010-01-25 16:49 ` [PATCH] QEMU-KVM - provide e820 reserve through qemu_cfg Jes Sorensen
2010-01-25 16:49   ` [Qemu-devel] " Jes Sorensen
2010-01-25 16:52   ` [PATCH] QEMU " Jes Sorensen
2010-01-25 16:52     ` [Qemu-devel] " Jes Sorensen
2010-01-25 16:58     ` Alexander Graf
2010-01-25 16:58       ` [Qemu-devel] " Alexander Graf
2010-01-25 17:13       ` Jes Sorensen
2010-01-25 17:13         ` [Qemu-devel] " Jes Sorensen
2010-01-25 17:28         ` Alexander Graf
2010-01-25 17:28           ` [Qemu-devel] " Alexander Graf
2010-01-25 17:46           ` Jes Sorensen
2010-01-25 17:46             ` [Qemu-devel] " Jes Sorensen
2010-01-25 20:04             ` Alexander Graf
2010-01-25 20:04               ` [Qemu-devel] " Alexander Graf
2010-01-25 20:14               ` Anthony Liguori
2010-01-25 20:14                 ` [Qemu-devel] " Anthony Liguori
2010-01-25 21:05                 ` Jes Sorensen
2010-01-25 21:05                   ` [Qemu-devel] " Jes Sorensen
2010-01-25 21:08                   ` Alexander Graf
2010-01-25 21:08                     ` [Qemu-devel] " Alexander Graf
2010-01-25 21:24                     ` Jes Sorensen
2010-01-25 21:24                       ` [Qemu-devel] " Jes Sorensen
2010-01-26  6:46         ` Gleb Natapov
2010-01-26  6:46           ` [Qemu-devel] " Gleb Natapov
2010-01-26  8:36           ` Jes Sorensen
2010-01-26  8:36             ` [Qemu-devel] " Jes Sorensen
2010-01-26  0:24 ` [PATCH] Seabios - read e820 reserve from qemu_cfg Kevin O'Connor
2010-01-26  0:24   ` [Qemu-devel] " Kevin O'Connor
2010-01-26 21:52   ` [PATCH] Seabios - read e820 table " Jes Sorensen
2010-01-26 21:52     ` [Qemu-devel] " Jes Sorensen
2010-01-26 21:53     ` [PATCH] QEMU-KVM - provide e820 table via fw_cfg Jes Sorensen
2010-01-26 21:53       ` [Qemu-devel] " Jes Sorensen
2010-01-26 21:55       ` Alexander Graf
2010-01-26 21:55         ` [Qemu-devel] " Alexander Graf
2010-01-28  4:39     ` [PATCH] Seabios - read e820 table from qemu_cfg Kevin O'Connor
2010-01-28  4:39       ` [Qemu-devel] " Kevin O'Connor
2010-01-29  9:03       ` Jes Sorensen
2010-01-29  9:03         ` [Qemu-devel] " Jes Sorensen
2010-01-29 16:08         ` Gleb Natapov
2010-01-29 16:08           ` [Qemu-devel] " Gleb Natapov
2010-01-30  3:35         ` Kevin O'Connor
2010-01-30  3:35           ` [Qemu-devel] " Kevin O'Connor
2010-02-08 10:31       ` Jes Sorensen
2010-02-08 10:31         ` [Qemu-devel] " Jes Sorensen
2010-02-14  3:16         ` Kevin O'Connor
2010-02-14  3:16           ` [Qemu-devel] " Kevin O'Connor

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B5DCAF2.3010105@redhat.com \
    --to=jes.sorensen@redhat.com \
    --cc=aliguori@us.ibm.com \
    --cc=avi@redhat.com \
    --cc=kevin@koconnor.net \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.