From: Jeremy Fitzhardinge <jeremy@goop.org>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: the arch/x86 maintainers <x86@kernel.org>,
Ingo Molnar <mingo@elte.hu>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Xen-devel <xen-devel@lists.xensource.com>,
Ian Campbell <ian.campbell@citrix.com>,
Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
Subject: [PATCH 08/15] xen/dom0: Use host E820 map
Date: Mon, 23 Mar 2009 11:09:52 -0700 [thread overview]
Message-ID: <1237831799-6568-9-git-send-email-jeremy@goop.org> (raw)
In-Reply-To: <49C45238.7050007@zytor.com>
From: Ian Campbell <ian.campbell@citrix.com>
Impact: synthesize virtual E820 using real one as template
Unlike the non-paravirt Xen port we do not have distinct psuedo-physical
and I/O memory resource-spaces and therefore resources in the two
can clash. Fix this by registering a memory map which matches the
underlying I/O map. Currently this wastes the memory in the reserved
regions. Eventually we should remap this memory to the end of the
address space.
Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
---
arch/x86/xen/setup.c | 45 +++++++++++++++++++++++++++++++++++++--
include/xen/interface/memory.h | 29 +++++++++++++++++++++++++
2 files changed, 71 insertions(+), 3 deletions(-)
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 3e4cf46..175396c 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -19,6 +19,7 @@
#include <xen/page.h>
#include <xen/interface/callback.h>
+#include <xen/interface/memory.h>
#include <xen/interface/physdev.h>
#include <xen/features.h>
@@ -36,16 +37,54 @@ extern void xen_syscall32_target(void);
/**
* machine_specific_memory_setup - Hook for machine specific memory setup.
**/
-
char * __init xen_memory_setup(void)
{
unsigned long max_pfn = xen_start_info->nr_pages;
+ unsigned long long mem_end;
+ int rc;
+ struct xen_memory_map memmap;
+ /*
+ * This is rather large for a stack variable but this early in
+ * the boot process we know we have plenty slack space.
+ */
+ struct e820entry map[E820MAX];
+ int op = xen_initial_domain() ?
+ XENMEM_machine_memory_map :
+ XENMEM_memory_map;
+ int i;
max_pfn = min(MAX_DOMAIN_PAGES, max_pfn);
+ mem_end = PFN_PHYS((u64)max_pfn);
+
+ memmap.nr_entries = E820MAX;
+ set_xen_guest_handle(memmap.buffer, map);
+
+ rc = HYPERVISOR_memory_op(op, &memmap);
+ if (rc == -ENOSYS) {
+ memmap.nr_entries = 1;
+ map[0].addr = 0ULL;
+ map[0].size = mem_end;
+ /* 8MB slack (to balance backend allocations). */
+ map[0].size += 8ULL << 20;
+ map[0].type = E820_RAM;
+ rc = 0;
+ }
+ BUG_ON(rc);
e820.nr_map = 0;
-
- e820_add_region(0, PFN_PHYS((u64)max_pfn), E820_RAM);
+ for (i = 0; i < memmap.nr_entries; i++) {
+ unsigned long long end = map[i].addr + map[i].size;
+ if (map[i].type == E820_RAM) {
+ if (map[i].addr > mem_end)
+ continue;
+ if (end > mem_end) {
+ /* Truncate region to max_mem. */
+ map[i].size -= end - mem_end;
+ }
+ }
+ if (map[i].size > 0)
+ e820_add_region(map[i].addr, map[i].size, map[i].type);
+ }
/*
* Even though this is normal, usable memory under Xen, reserve
diff --git a/include/xen/interface/memory.h b/include/xen/interface/memory.h
index af36ead..e6c6bcb 100644
--- a/include/xen/interface/memory.h
+++ b/include/xen/interface/memory.h
@@ -142,4 +142,33 @@ struct xen_translate_gpfn_list {
};
DEFINE_GUEST_HANDLE_STRUCT(xen_translate_gpfn_list);
+/*
+ * Returns the pseudo-physical memory map as it was when the domain
+ * was started (specified by XENMEM_set_memory_map).
+ * arg == addr of struct xen_memory_map.
+ */
+#define XENMEM_memory_map 9
+struct xen_memory_map {
+ /*
+ * On call the number of entries which can be stored in buffer. On
+ * return the number of entries which have been stored in
+ * buffer.
+ */
+ unsigned int nr_entries;
+
+ /*
+ * Entries in the buffer are in the same format as returned by the
+ * BIOS INT 0x15 EAX=0xE820 call.
+ */
+ GUEST_HANDLE(void) buffer;
+};
+DEFINE_GUEST_HANDLE_STRUCT(xen_memory_map);
+
+/*
+ * Returns the real physical memory map. Passes the same structure as
+ * XENMEM_memory_map.
+ * arg == addr of struct xen_memory_map.
+ */
+#define XENMEM_machine_memory_map 10
+
#endif /* __XEN_PUBLIC_MEMORY_H__ */
--
1.6.0.6
next prev parent reply other threads:[~2009-03-23 18:15 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <49C28AC2.4010407@goop.org>
[not found] ` <49C29381.9050201@zytor.com>
[not found] ` <49C29983.3040305@goop.org>
[not found] ` <49C2ABCA.6010009@zytor.com>
[not found] ` <49C43D31.7040805@goop.org>
[not found] ` <49C45238.7050007@zytor.com>
2009-03-23 17:38 ` [GIT PULL] x86/paravirt: allow preemption while doing lazy mmu update Jeremy Fitzhardinge
2009-03-23 17:38 ` Jeremy Fitzhardinge
2009-03-23 17:45 ` [GIT PULL] core Xen updates for 2.6.30 Jeremy Fitzhardinge
2009-03-23 17:55 ` [GIT PULL] xen domU control interfaces Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 01/11] xen: add irq_from_evtchn Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 02/11] xen: add /dev/xen/evtchn driver Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 03/11] xen: export ioctl headers to userspace Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 04/11] xen/dev-evtchn: clean up locking in evtchn Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 05/11] xen: add "capabilities" file Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 06/11] xen: add /sys/hypervisor support Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 07/11] xen/sys/hypervisor: change writable_pt to features Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 08/11] xen: drop kexec bits from /sys/hypervisor since kexec isn't implemented yet Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 09/11] xen: remove suspend_cancel hook Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 10/11] xen: use device model for suspending xenbus devices Jeremy Fitzhardinge
2009-03-23 17:55 ` [PATCH 11/11] xen/xenbus: export xenbus_dev_changed Jeremy Fitzhardinge
2009-03-23 18:09 ` [GIT PULL] xen/dom0: core dom0 support Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 01/15] xen dom0: Make hvc_xen console work for dom0 Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 02/15] xen dom0: Initialize xenbus " Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 03/15] xen dom0: Set up basic IO permissions " Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 04/15] xen dom0: Add support for the platform_ops hypercall Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 05/15] xen mtrr: Add mtrr_ops support for Xen mtrr Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 06/15] xen: disable PAT Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 07/15] xen/dom0: use _PAGE_IOMAP in ioremap to do machine mappings Jeremy Fitzhardinge
2009-03-23 18:09 ` Jeremy Fitzhardinge [this message]
2009-03-23 18:09 ` [PATCH 09/15] xen: implement XENMEM_machphys_mapping Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 10/15] xen: clear reserved bits in l3 entries given in the initial pagetables Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 11/15] xen: allow enable use of VGA console on dom0 Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 12/15] xen/dom0: add XEN_DOM0 config option Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 13/15] x86: make /dev/mem mappings _PAGE_IOMAP Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 14/15] paravirtualize IO permission bitmap Jeremy Fitzhardinge
2009-03-23 18:09 ` [PATCH 15/15] x86: don't need "changed" parameter for set_io_bitmap() Jeremy Fitzhardinge
2009-03-13 16:29 [GIT PULL] Xen dom0 core changes Jeremy Fitzhardinge
2009-03-13 16:29 ` [PATCH 08/15] xen/dom0: Use host E820 map Jeremy Fitzhardinge
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=1237831799-6568-9-git-send-email-jeremy@goop.org \
--to=jeremy@goop.org \
--cc=hpa@zytor.com \
--cc=ian.campbell@citrix.com \
--cc=jeremy.fitzhardinge@citrix.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xensource.com \
/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.