* [Qemu-devel] [PATCH] Seabios e820 reservation portion
@ 2010-02-15 17:33 Jes Sorensen
2010-02-16 0:43 ` [Qemu-devel] " Kevin O'Connor
0 siblings, 1 reply; 4+ messages in thread
From: Jes Sorensen @ 2010-02-15 17:33 UTC (permalink / raw)
To: Kevin O'Connor
Cc: Anthony Liguori, seabios, QEMU Developers, Stefano Stabellini
[-- Attachment #1: Type: text/plain, Size: 91 bytes --]
Hi,
This is the Seabios part to match my e820 reservation via fw_cfg patch.
Cheers,
Jes
[-- Attachment #2: 0005-seabios-e820-table-v2.patch --]
[-- Type: text/plain, Size: 3087 bytes --]
Read optional table of e820 entries from qemu_cfg
Read optional table of e820 entries through qemu_cfg, allowing QEMU to
provide the location of KVM's switch area etc. rather than rely on
hard coded values.
For now, fall back to the old hard coded values for the TSS and EPT
switch page for compatibility reasons. Compatibility code could
possibly be removed in the future.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
src/paravirt.c | 17 +++++++++++++++++
src/paravirt.h | 9 +++++++++
src/post.c | 13 ++++++++++++-
3 files changed, 38 insertions(+), 1 deletion(-)
Index: seabios/src/paravirt.c
===================================================================
--- seabios.orig/src/paravirt.c
+++ seabios/src/paravirt.c
@@ -132,6 +132,23 @@ u16 qemu_cfg_smbios_entries(void)
return cnt;
}
+u32 qemu_cfg_e820_entries(void)
+{
+ u32 cnt;
+
+ if (!qemu_cfg_present)
+ return 0;
+
+ qemu_cfg_read_entry(&cnt, QEMU_CFG_E820_TABLE, sizeof(cnt));
+ return cnt;
+}
+
+void* qemu_cfg_e820_load_next(void *addr)
+{
+ qemu_cfg_read(addr, sizeof(struct e820_entry));
+ return addr;
+}
+
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_TABLE (QEMU_CFG_ARCH_LOCAL + 3)
extern int qemu_cfg_present;
@@ -61,8 +62,16 @@ typedef struct QemuCfgFile {
char name[56];
} QemuCfgFile;
+struct e820_entry {
+ u64 address;
+ u64 length;
+ u32 type;
+};
+
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);
+u32 qemu_cfg_e820_entries(void);
+void* qemu_cfg_e820_load_next(void *addr);
#endif
Index: seabios/src/post.c
===================================================================
--- seabios.orig/src/post.c
+++ seabios/src/post.c
@@ -135,10 +135,21 @@ ram_probe(void)
, E820_RESERVED);
add_e820(BUILD_BIOS_ADDR, BUILD_BIOS_SIZE, E820_RESERVED);
- if (kvm_para_available())
+ u32 count = qemu_cfg_e820_entries();
+ if (count) {
+ struct e820_entry entry;
+ int i;
+
+ for (i = 0; i < count; i++) {
+ qemu_cfg_e820_load_next(&entry);
+ add_e820(entry.address, entry.length, entry.type);
+ }
+ } else if (kvm_para_available()) {
+ // Backwards compatibility - provide hard coded range.
// 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);
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] Re: [PATCH] Seabios e820 reservation portion
2010-02-15 17:33 [Qemu-devel] [PATCH] Seabios e820 reservation portion Jes Sorensen
@ 2010-02-16 0:43 ` Kevin O'Connor
2010-02-16 8:46 ` [Qemu-devel] [PATCH] Seabios e820 reservation portion v3 Jes Sorensen
0 siblings, 1 reply; 4+ messages in thread
From: Kevin O'Connor @ 2010-02-16 0:43 UTC (permalink / raw)
To: Jes Sorensen
Cc: Anthony Liguori, seabios, QEMU Developers, Stefano Stabellini
On Mon, Feb 15, 2010 at 06:33:59PM +0100, Jes Sorensen wrote:
> Hi,
>
> This is the Seabios part to match my e820 reservation via fw_cfg patch.
This still has 'struct e820_entry' which is too similar to 'struct
e820entry' in memmap.h. Otherwise, it looks good to me.
-Kevin
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] [PATCH] Seabios e820 reservation portion v3
2010-02-16 0:43 ` [Qemu-devel] " Kevin O'Connor
@ 2010-02-16 8:46 ` Jes Sorensen
2010-02-21 19:18 ` [Qemu-devel] " Kevin O'Connor
0 siblings, 1 reply; 4+ messages in thread
From: Jes Sorensen @ 2010-02-16 8:46 UTC (permalink / raw)
To: Kevin O'Connor
Cc: Anthony Liguori, seabios, QEMU Developers, Stefano Stabellini
[-- Attachment #1: Type: text/plain, Size: 506 bytes --]
On 02/16/10 01:43, Kevin O'Connor wrote:
> On Mon, Feb 15, 2010 at 06:33:59PM +0100, Jes Sorensen wrote:
>> Hi,
>>
>> This is the Seabios part to match my e820 reservation via fw_cfg patch.
>
> This still has 'struct e820_entry' which is too similar to 'struct
> e820entry' in memmap.h. Otherwise, it looks good to me.
Hmmm didn't catch that one earlier, thanks for pointing it out. I have
renamed it to struct e820_reservation to make it different.
Hope this version does the trick then.
Cheers,
Jes
[-- Attachment #2: 0005-seabios-e820-table-v3.patch --]
[-- Type: text/plain, Size: 3105 bytes --]
Read optional table of e820 entries from qemu_cfg
Read optional table of e820 entries through qemu_cfg, allowing QEMU to
provide the location of KVM's switch area etc. rather than rely on
hard coded values.
For now, fall back to the old hard coded values for the TSS and EPT
switch page for compatibility reasons. Compatibility code could
possibly be removed in the future.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
src/paravirt.c | 17 +++++++++++++++++
src/paravirt.h | 9 +++++++++
src/post.c | 13 ++++++++++++-
3 files changed, 38 insertions(+), 1 deletion(-)
Index: seabios/src/paravirt.c
===================================================================
--- seabios.orig/src/paravirt.c
+++ seabios/src/paravirt.c
@@ -132,6 +132,23 @@ u16 qemu_cfg_smbios_entries(void)
return cnt;
}
+u32 qemu_cfg_e820_entries(void)
+{
+ u32 cnt;
+
+ if (!qemu_cfg_present)
+ return 0;
+
+ qemu_cfg_read_entry(&cnt, QEMU_CFG_E820_TABLE, sizeof(cnt));
+ return cnt;
+}
+
+void* qemu_cfg_e820_load_next(void *addr)
+{
+ qemu_cfg_read(addr, sizeof(struct e820_reservation));
+ return addr;
+}
+
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_TABLE (QEMU_CFG_ARCH_LOCAL + 3)
extern int qemu_cfg_present;
@@ -61,8 +62,16 @@ typedef struct QemuCfgFile {
char name[56];
} QemuCfgFile;
+struct e820_reservation {
+ u64 address;
+ u64 length;
+ u32 type;
+};
+
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);
+u32 qemu_cfg_e820_entries(void);
+void* qemu_cfg_e820_load_next(void *addr);
#endif
Index: seabios/src/post.c
===================================================================
--- seabios.orig/src/post.c
+++ seabios/src/post.c
@@ -135,10 +135,21 @@ ram_probe(void)
, E820_RESERVED);
add_e820(BUILD_BIOS_ADDR, BUILD_BIOS_SIZE, E820_RESERVED);
- if (kvm_para_available())
+ u32 count = qemu_cfg_e820_entries();
+ if (count) {
+ struct e820_reservation entry;
+ int i;
+
+ for (i = 0; i < count; i++) {
+ qemu_cfg_e820_load_next(&entry);
+ add_e820(entry.address, entry.length, entry.type);
+ }
+ } else if (kvm_para_available()) {
+ // Backwards compatibility - provide hard coded range.
// 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);
^ permalink raw reply [flat|nested] 4+ messages in thread
* [Qemu-devel] Re: [PATCH] Seabios e820 reservation portion v3
2010-02-16 8:46 ` [Qemu-devel] [PATCH] Seabios e820 reservation portion v3 Jes Sorensen
@ 2010-02-21 19:18 ` Kevin O'Connor
0 siblings, 0 replies; 4+ messages in thread
From: Kevin O'Connor @ 2010-02-21 19:18 UTC (permalink / raw)
To: Jes Sorensen
Cc: Anthony Liguori, seabios, QEMU Developers, Stefano Stabellini
On Tue, Feb 16, 2010 at 09:46:08AM +0100, Jes Sorensen wrote:
> On 02/16/10 01:43, Kevin O'Connor wrote:
> >On Mon, Feb 15, 2010 at 06:33:59PM +0100, Jes Sorensen wrote:
> >>Hi,
> >>
> >>This is the Seabios part to match my e820 reservation via fw_cfg patch.
> >
> >This still has 'struct e820_entry' which is too similar to 'struct
> >e820entry' in memmap.h. Otherwise, it looks good to me.
>
> Hmmm didn't catch that one earlier, thanks for pointing it out. I have
> renamed it to struct e820_reservation to make it different.
>
> Hope this version does the trick then.
Thanks - commit 0360e8e6.
-Kevin
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-02-21 19:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-02-15 17:33 [Qemu-devel] [PATCH] Seabios e820 reservation portion Jes Sorensen
2010-02-16 0:43 ` [Qemu-devel] " Kevin O'Connor
2010-02-16 8:46 ` [Qemu-devel] [PATCH] Seabios e820 reservation portion v3 Jes Sorensen
2010-02-21 19:18 ` [Qemu-devel] " Kevin O'Connor
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).